我尝试获取数字元素的文本并使用jquery放入数组。但是得到以下错误:
未捕获的TypeError:aTags [i] .parent不是函数。
如何解决这个问题?
$('#flight-stops-filter ul li a').click(function() {
var aTags=$('#flight-stops-filter ul li a');
stops = [];
for (var i = 0; i < aTags.length; i++) {
if (aTags[i].parent("li").hasClass('active')) {
alert(this.text);
stops.push(this.text.substr(0, 1));
}
}
});
答案 0 :(得分:2)
使用括号表示时
eq(index)
它返回一个DOM节点
您想使用aTags.eq(i).parent("li")
this.text
现在在循环中使用text
也可能是错误的,因为DOM中没有$('#flight-stops-filter ul li a').click(function() {
var aTags=$('#flight-stops-filter ul li a');
stops = [];
for (var i = 0; i < aTags.length; i++) {
var li = aTags.eq(i).parent("li");
if (li.hasClass('active')) {
console.log(li.text());
stops.push(li.text().substr(0, 1));
}
}
});
属性。
所以你可能想要的是
{{1}}
答案 1 :(得分:1)
aTags
是Jquery对象,其中包含纯DOM对象。因此,如果不将它们包装在jquery中,您将无法在纯DOM对象上调用jquery方法。
用
替换你的for循环 aTags.each(function(){
if( $(this).parent("li").hasClass('active'))
{
alert(this.text);
stops.push(this.text.substr(0, 1));
}
});
正如jquery learning documentation中所述,不是通过括号表示法访问,而是需要通过jquery的eq
方法访问它。
aTags.eq( 0 );//for first DOM object wrapped inside a jquery object
用于访问DOM对象
aTags.get(0) ;//same as aTags[0];
答案 2 :(得分:0)
将变量包装在jQuery对象中(将_drawerLayout.setScrimColor(Color.argb(128, 255, 255, 255));
更改为aTags[i].parent
):
$(aTags[i]).parent
或:
if ($(aTags[i]).parent("li").hasClass('active')) {
alert(this.text);
stops.push(this.text.substr(0, 1));
}
答案 3 :(得分:0)
其他人已经很好地解释了错误的原因。这个替代方案既直截了当,也没有机会遇到这个错误:
var links = $('#flight-stops-filter ul li a');
links.click(function() {
stops = links.parent('.active').find('a').map(function() {
return $(this).text().substr(0,1);
}).get();
});