未捕获的TypeError:无法读取属性' children'未定义的

时间:2013-12-02 10:10:09

标签: javascript jquery

我需要在指定类的所有div下获取所有 a 元素的 href 属性。当我只有一个div时没有问题,但是当div的数量增加时我得到了问题标题的错误.. here is my demo,请看一看,不要忘记检查元素以获得错误消息(当您单击 请点击此处以获取结果 警告时,同时js错误将转到控制台)

3 个答案:

答案 0 :(得分:1)

如果将选择器修改为.pg-header a,则map()功能可用于检索所有hrefs

function get_sub_elements(){
    var hrefs = $(".pg-header a").map(function(i,e){
       return $(e).attr("href");
    });
    for(var i = 0; i < hrefs.length; i++){
       alert(hrefs[i]);
    }
}

JS小提琴: http://jsfiddle.net/hth9Z/3/

答案 1 :(得分:1)

更改了您的代码

$(".pg-header a").each(function(index,elem) {

                console.log(elem);

            });

检查一下:http://jsfiddle.net/3tyzd/1/

答案 2 :(得分:1)

如果使用更好的命名变量,我认为问题更明显......

http://jsfiddle.net/hth9Z/4/

$(".pg-header").each(function(index,element) {

    for(i=0;i<$(element)[index].children.length;i++)
    {

    if($(element)[index].children[i].localName=="a")
    {
        alert($($(element)[index].children[i]).attr("href"));
        my_arr.push($($(element)[index].children[i]).attr("href"))
    }

    }

});

传递给函数的参数是索引和循环中的特定项。你正在做的是获取你传递的一个元素(循环中的当前元素)并将其包装到jquery对象中。然后,您将索引应用于该索引。包装在jquery对象中的一个对象仍然只是一个项目,因此大于一的索引永远不合适。因此,当您将element作为第二个匹配项并且index为1时,在第二个循环中,$(element)[index]未定义,因此当您调用方法时会出现错误。

因为你最好用jQuery做更多的事情。像$(".pg-header a")之类的东西会获得.pg-header中的所有锚元素,然后您可以像其他人建议的那样分析它们。

总而言之,请确保您了解您的参数是什么 - 给予他们合理的名称将有助于此。

有关您正在使用的方法的信息,另请参阅http://api.jquery.com/each/