[英]jQuery attribute selector - am I doing something wrong?
var selector = "ul.lower-menu li a[innerText=\"" + PanelSettings[tab_name_key] + "\"]";
我试图获取具有innerText属性设置为以前存储的值的水平菜单选项卡。
配置值的存储方式如下:
PanelSettings[tab_name_key] = $("ul.lower-menu li:first > a").prop("innerText");
它实际上在那里,并且始终具有适当的价值。
我没有从jQuery中得到任何信息-我在这里做错了什么吗?
编辑:我正在使用jQuery 1.6.4
是的,您做错了。 属性选择器选择具有特定属性集的元素。 innerText
是属性 ,而不是属性–实际上,您可以通过使用prop
进行设置来识别。
您有两个选择。 一种是使用:contains
选择器:
"ul.lower-menu li a:contains(" + PanelSettings[tab_name_key] + ")"
但是,如果您要求foo
,它将选择foobar
。 更好的选择是使用filter
自己进行filter
:
var selector = "ul.lower-menu li a";
var els = $(selector).filter(function() {
return $.text([this]) === PanelSettings[tab_name_key];
});
这仅选择文本内容与给定设置相同的元素。
注意,也正如Diodeus所说,您应该使用text()
而不是prop('innerText')
。
您可能想尝试使用filter
而不是属性选择器,在这种情况下,属性选择器会在恕我直言的边界上:
var selector = "ul.lower-menu li a";
var $links = $(selector).filter(function() {
return $(this).text() == PanelSettings[tab_name_key];
});
代替:
.prop("innerText");
采用:
.text()
也许您想使用:contains(text)jQuery选择器?
好吧,它是一个属性选择器,而不是属性选择器。 您不能使用类似的选择器。 使用.filter()和function()变体
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.