你如何得到任何类定义的DOM元素的所有后代?

时间:2016-06-02 21:44:31

标签: jquery dom

我对jQuery和javascript一般都很陌生,我希望只返回定义了类的DOM元素。例如:

<div id="myObject">
  <h2>hello world</h2>
  <div class="foo">bar</div>
  <div class="bar">foo</div>
  <div></div><a href="http://google.com"></a>
</div>

我想知道是否存在jQuery函数或者我可以传递给$(#myObject).find(...)的聪明搜索参数,它只会返回.foo.bar,因为这些是唯一的两个定义了类的DOM元素。为了概括,是否也可以搜索任何属性的存在?

似乎我可以使用更复杂的函数调用字符串来完成此操作,例如

var toReturn = [];
var descendants = $('#myObject').find('*');
$.map(descendants, function (element, index) {
    if(element.getAttribute('class') != undefined){
      toReturn.push(element);
    }
});

但如果有更简单的东西,了解它会有所帮助。

1 个答案:

答案 0 :(得分:3)

使用$('#myObject [class]:not([class=""])')。它将选择已定义类的#myObject的所有后代,并且它将排除已删除类的元素。 (感谢@TravisJ的not语法!)

<强>段:

&#13;
&#13;
$('.byebye').removeClass('byebye');

$('#myObject [class]:not([class=""])').addClass('selected');
&#13;
.selected {
  color: green;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="myObject">
  <h2>hello world</h2>
  <div class="foo">bar</div>
  <div class="bar">foo</div>
  <div class="byebye">
    class removed
  </div>
  <div>
    no class here
  </div>
  <a href="http://google.com">none here either</a>
</div>
&#13;
&#13;
&#13;