jQuery属性选择器 - 我做错了吗?

时间:2011-10-07 15:10:44

标签: javascript jquery

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

5 个答案:

答案 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?

http://api.jquery.com/contains-selector/

答案 4 :(得分:0)

嗯,它是属性选择器,而不是属性选择器。你不能使用这样的选择器。使用.filter()代替函数()变体