jquery中最接近的函数并提取元素

时间:2016-05-25 04:42:29

标签: javascript jquery html javascript-events

我有一个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"。我错过了什么?

编辑:由于拼写错误,错过了标签

2 个答案:

答案 0 :(得分:2)

有多个问题,

  • $(this)返回一个没有name属性的jQuery对象,而是可以使用$(this).attr('name')
  • .closest()用于查找祖先元素,但ali元素的后代,因此您需要使用find()

您可以找到所有没有给定名称的li元素,然后在其中找到a元素,如

&#13;
&#13;
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;
&#13;
&#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}

使用.filter()

  

描述:将匹配元素集合减少到与选择器匹配的元素或通过函数测试。