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
答案 0 :(得分:4)
是的,你做错了什么。属性选择器选择具有某个属性的元素。 innerText
是一个属性,而不是一个属性 - 实际上您可以通过使用prop
进行设置来识别它。
您有两种选择。一种是使用:contains
选择器:
"ul.lower-menu li a:contains(" + PanelSettings[tab_name_key] + ")"
但是,如果您要求foobar
,则会选择foo
。更好的选择是使用filter
:
var selector = "ul.lower-menu li a";
var els = $(selector).filter(function() {
return $.text([this]) === PanelSettings[tab_name_key];
});
这仅选择其文本内容与给定设置相同的元素。
另外,正如Diodeus所说,你应该使用text()
而不是prop('innerText')
。
答案 1 :(得分:2)
你可能想尝试filter
而不是属性选择器,在这种情况下,恕我直言的辱骂:
var selector = "ul.lower-menu li a";
var $links = $(selector).filter(function() {
return $(this).text() == PanelSettings[tab_name_key];
});
答案 2 :(得分:1)
而不是:
.prop("innerText");
使用:
.text()
答案 3 :(得分:0)
也许你想使用:contains(text)jQuery selector?
答案 4 :(得分:0)
嗯,它是属性选择器,而不是属性选择器。你不能使用这样的选择器。使用.filter()代替函数()变体