Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery属性选择器-我做错什么了吗?_Javascript_Jquery - Fatal编程技术网

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

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] = $

我正在尝试获取水平菜单选项卡,该选项卡的innerText属性设置为以前存储的值

配置值的存储方式如下:

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];
             });