Javascript jQuery属性选择器-我做错什么了吗?
我正在尝试获取水平菜单选项卡,该选项卡的innerText属性设置为以前存储的值 配置值的存储方式如下:Javascript jQuery属性选择器-我做错什么了吗?,javascript,jquery,Javascript,Jquery,我正在尝试获取水平菜单选项卡,该选项卡的innerText属性设置为以前存储的值 配置值的存储方式如下: var selector = "ul.lower-menu li a[innerText=\"" + PanelSettings[tab_name_key] + "\"]"; 它实际上在那里,并且总是有适当的值 我没有从jQuery中得到任何东西-我在这里做了什么明显的错误吗 编辑:我正在使用jQuery 1.6.4,而不是: PanelSettings[tab_name_key] = $
var selector = "ul.lower-menu li a[innerText=\"" + PanelSettings[tab_name_key] + "\"]";
它实际上在那里,并且总是有适当的值
我没有从jQuery中得到任何东西-我在这里做了什么明显的错误吗
编辑:我正在使用jQuery 1.6.4,而不是:
PanelSettings[tab_name_key] = $("ul.lower-menu li:first > a").prop("innerText");
使用:
也许您想使用:contains(text)jQuery选择器
嗯,它是一个属性选择器,而不是属性选择器。你不能那样使用选择器。改为与function()变量一起使用是的,您做错了什么。属性选择器选择具有特定属性集的元素
innerText
是一个属性,而不是一个属性,您可以通过使用prop
来设置它
你有两个选择。一种是使用:包含选择器:
.text()
但是,如果您要求foo
,则会选择foobar
。更好的选择是使用filter
自己进行过滤:
"ul.lower-menu li a:contains(" + PanelSettings[tab_name_key] + ")"
这仅选择文本内容与给定设置相同的元素
注意,正如迪奥德乌斯所说,您应该使用text()
而不是prop('innerText')
您可能想尝试筛选
,而不是属性选择器,在这种情况下,属性选择器与滥用接近:
var selector = "ul.lower-menu li a";
var els = $(selector).filter(function() {
return $.text([this]) === PanelSettings[tab_name_key];
});
据我所知,“innerText”属性不能在这样的选择器中使用。选择器语法用于属性,而不是属性。这更像是对良好实践的评论,是关于选择器问题的答案。那么问题可能是选择器。查看是否得到任何结果:alert($(($ul.lower-menu li:first>a”).length)我使用opera和console.debug中的“Firebug-like”工具查看得到的结果。这比在调试js时使用alert要好得多。这实际上适用于所有浏览器(例如,FF、Opera、Chrome)。Chrome和Opera在IE和FF中内置了此工具。您需要安装此工具。$.text([this])
?你的意思肯定是$(这个).text()
谢谢!我不知道属性和属性之间的区别。我需要了解一下。@Einacio$。text([this])
是一种没有文档记录但速度更快的方法,因为它不需要进行不必要的jQuery选择。谢谢回答+我的答案是1,但lonesomeday的答案更彻底。
var selector = "ul.lower-menu li a";
var els = $(selector).filter(function() {
return $.text([this]) === PanelSettings[tab_name_key];
});
var selector = "ul.lower-menu li a";
var $links = $(selector).filter(function() {
return $(this).text() == PanelSettings[tab_name_key];
});