Search code examples
dynamicparent-childdynamic-datainnerhtml

Get link from childNodes' innerHTML dynamically


I have page with products catalogue and need to assign link to every products using it's name (innerHTML). The page looks like:

<!DOCTYPE html>
<html>
<head>
<script>
function searchlinks() {
var catbox=document.getElementById("category-box");
var boxcont=catbox.getElementsByTagName("a");
var h3href=catbox.getElementsByTagName("h3");

var www0="../search/" + h3href[0].innerHTML + "+" + boxcont[0].innerHTML;
var www1="../search/" + h3href[0].innerHTML + "+" + boxcont[1].innerHTML;
var www2="../search/" + h3href[0].innerHTML + "+" + boxcont[2].innerHTML;
var www3="../search/" + h3href[0].innerHTML + "+" + boxcont[3].innerHTML;

boxcont[0].href=www0;
boxcont[1].href=www1;
boxcont[2].href=www2;
boxcont[3].href=www3;

}
</script>
</head>
<body onload="searchlinks()">

<div id="category-box"><div class="category-block"><div class="category-blockimage"><img src="" alt="" ></div><div class="category-blockcontent">
     <h3>Clothing</h3>
<a href="">Men's</a>
<a href="">Women's</a>
<a href="">Boys'</a>
<a href="">Girls'</a>
</div></div></div>

<div id="category-box"><div class="category-block"><div class="category-blockimage"><img src="" alt="" ></div><div class="category-blockcontent">
     <h3>Protective Gear</h3>
<a href="">Chin Straps</a>
<a href="">Facemasks</a>
<a href="">Flak Jackets</a>
<a href="">Girdles</a>
<a href="">Hand Pads</a>
<a href="">Arm Pads</a>
<a href="">Helmets</a>
<a href="">Hip Pads</a>
</div></div></div>
</body>
</html>

But I have faced with a lot of problems. Here are my questions:
1) How to assign links dynamically? (without using var = www0 , www1 ...)
2) Function searchlinks() affects only on the first "category-block" div. How to use this function for all such divs on the page?

Here is my jsfiddle: http://jsfiddle.net/RGe8U/1/


Solution

  • Here is the fixed script and html. I have given different ids for two different divs, as ids should be unique then search them individually and call addLink function for both of them.

    <html>
    <head>
    <script>
    function addLink(catbox) {
            var boxcont=catbox.getElementsByTagName("a");
            var h3href=catbox.getElementsByTagName("h3");
            //alert(h3href[0].innerHTML);
            for (var i=0; i<boxcont.length; i++) {
                    boxcont[i].href="../search/" + h3href[0].innerHTML + "+" + boxcont[i].innerHTML;
            }
    }
    function searchlinks() {
            addLink (document.getElementById("category-box"));
            addLink (document.getElementById("category-box2"));
    }
    </script>
    </head>
    <body onload="searchlinks()">
    
    <div id="category-box"><div class="category-block"><div class="category-blockimage"><img src="" alt="" ></div><div class="category-blockcontent">
         <h3>Clothing</h3>
    <a href="">Men's</a>
    <a href="">Women's</a>
    <a href="">Boys'</a>
    <a href="">Girls'</a>
    </div></div></div>
    
    <div id="category-box2"><div class="category-block"><div class="category-blockimage"><img src="" alt="" ></div><div class="category-blockcontent">
         <h3>ProtectiveGear</h3>
    <a href="">Chin Straps</a>
    <a href="">Facemasks</a>
    <a href="">Flak Jackets</a>
    <a href="">Girdles</a>
    <a href="">Hand Pads</a>
    <a href="">Arm Pads</a>
    <a href="">Helmets</a>
    <a href="">Hip Pads</a>
    </div></div></div>
    </body>
    </html>
    

    Edit: If you do not want to change the div ids then use this script:

        <script>
    function addLink(catbox) {
            var boxcont=catbox.getElementsByTagName("a");
            var h3href=catbox.getElementsByTagName("h3");
            alert(h3href[0].innerHTML);
            for (var i=0; i<boxcont.length; i++) {
                    boxcont[i].href="../search/" + h3href[0].innerHTML + "+" + boxcont[i].innerHTML;
            }
    }
    function searchlinks() {
            var divs = document.getElementsByTagName("div");
            for (var i=0; i<divs.length; i++) {
                    if (divs[i].id === "category-box")
                    addLink (divs[i]);
            }
    }
    </script>