我有一个html片段如下:
<div id="samplediv">
<ul>
<li name="A">
<a id="A">
</li>
<li name="B">
<a id="B">
</li>
</ul>
</div>
我有一个名为:
的文字var text = "B";
我想检查文本是否与li的任何元素匹配,并为不匹配文本的锚元素添加类名&#34;禁用&#34; 。 我的情况我想添加一个名为&#34;禁用&#34; 的课程
<a id="A">
这就是我的尝试:
$("#samplediv li").each(function() {
if($(this).name != text){
$(this).closest("a").addClass("disabled");
}
});
但这里的问题是$(this).name
正在评估"undefined"
。我错过了什么?
编辑:由于拼写错误,错过了标签
答案 0 :(得分:2)
有多个问题,
$(this)
返回一个没有name
属性的jQuery对象,而是可以使用$(this).attr('name')
.closest()
用于查找祖先元素,但a
是li
元素的后代,因此您需要使用find()
您可以找到所有没有给定名称的li
元素,然后在其中找到a
元素,如
var text = 'B';
$("#samplediv li").not('[name="' + text + '"]').find("a").addClass("disabled");
&#13;
a.disabled {
color: green;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="samplediv">
<ul>
<li name="A">
<a id="A">a</a>
</li>
<li name="B">
<a id="B">b</a>
</li>
</ul>
</div>
&#13;
答案 1 :(得分:1)
config.omniauth :facebook, "App ID", "App Secret", scope: 'email', info_fields: 'email,name'
var text = "B";
$("#samplediv li").filter(function() {//use filter
return $(this).attr('name') != text;//use .attr() to get name attribute
}).find('a').addClass("disabled");//use find to get the anchor tag
.disabled{color:red}
描述:将匹配元素集合减少到与选择器匹配的元素或通过函数测试。