未捕获的类型错误:无法读取属性'儿童'的未定义

Uncaught TypeError: Cannot read property 'children' of undefined

本文关键字:属性 未定义 儿童 读取 类型 错误      更新时间:2024-01-11

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

如果选择器修改为.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 Fiddle:http://jsfiddle.net/hth9Z/3/

更改了代码

$(".pg-header a").each(function(index,elem) {
                console.log(elem);
            });

选中此项:http://jsfiddle.net/3tyzd/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对象中封装的一个对象仍然只是一个项,因此大于1的索引永远不合适。因此,在第二个循环中,当您将element作为第二个匹配项,并且index为1时,$(element)[index]是未定义的,因此当您调用它上的方法时会出现错误。

事实上,您最好使用jQuery做更多这样的事情。像$(".pg-header a")这样的东西将获得.pg-header中的所有锚元素,然后您可以按照其他人的建议进行分析。

总之,请确保您了解您的参数是什么——给它们合理的名称将有助于实现这一点。

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