2012-01-15 100 views
7

我需要检查一个元素是否包含使用JQUERY的某个子类。如何查找元素是否包含特定的类?

我想:

if ($('#myElement').has('.myClass')) { 
    do work son 
} 

没有工作。

我的HTML代码布局是这样的:

<div id="myElement"> 
    <img> 
    <span>something</span> 
    <span class="myClass">Hello</span> 
</div> 
+3

'的document.getElementById( “myElement”)getElementsByClassName方法( “MyClass的”)length' – Raynos 2012-01-15 01:34:14

+0

@Raynos:。哈哈...太多的JavaScript。 :P – naveen 2012-01-15 09:17:09

回答

7

最简单的方法是寻找.myClass#myElement孩子:

if($('#myElement .myClass')).length > 0) 

如果你只是想先平儿,你会用>

if($('#myElement > .myClass')).length > 0) 

另一种方式是选择传递给find和检查的结果:

if($('#myElement').find('.myClass').length > 0) 

或者只有第一级子:

if($('#myElement').children('.myClass').length > 0) 
+2

他想要孩子 – Raynos 2012-01-15 01:25:54

+0

这不起作用:/我不认为这会检查子元素,只是给出的元素。 – 2012-01-15 01:27:20

+0

+1:因为0是虚假的,你可以放心地省略'> 0' – naveen 2012-01-15 09:18:06

3

只需使用QS

var hasClass = document.getElementById("myElement").querySelector(".myClass");

或者你可以缓解儿童

var element = document.getElementById("myElement"); 

var hasClass = recursivelyWalk(element.childNodes, function hasClass(node) { 
    return node.classList.contains("myClass"); 
}); 

function recursivelyWalk(nodes, cb) { 
    for (var i = 0, len = nodes.length; i < len; i++) { 
     var node = nodes[i]; 
     var ret = cb(node); 
     if (ret) { 
      return ret; 
     } 
     if (node.childNodes && node.childNodes.length) { 
      var ret = recursivelyWalk(node.childNodes, cb); 
      if (ret) { 
       return ret; 
      } 
     } 
    } 
} 

使用recursivelyWalk.classList(它可以被微调)。

另外,您可以使用jQuery

$("#myElement .myClass").hasClass("myClass");

,或者如果你想不jQuery的复合操作,那么尝试NodeComposite

NodeComposite.$("#myElement *").classList.contains("myClass");

+0

为什么你没有按照你的评论使用getelementsbyclassname?即? – naveen 2012-01-15 09:20:56

+0

@naveen querySelector更短:) – Raynos 2012-01-15 11:18:54

3

尝试:

if($('#myElement').children('.myClass').length) { 
    // Do what you need to 
} 

jQuery对象返回一个数组,其中包含.length属性。上述代码检查#myElement中是否有.myClass子女,如果有(.length不为0),则执行if()语句中的代码。

这里有一个更明确的版本:

if($('#myElement').children('.myClass').length > 0) { 
    // Do what you need to 
} 

你总是可以使用$('#myElement .myClass').length过,但$.children()更清晰一些。要找到不是的孩子,请指定孩子,请使用$.find()代替$.children()

+0

这很好,谢谢。 – 2012-01-15 01:35:38

1
if($.contains($('#myElement'), $('.myClass'))){ 
    alert("True"); 
} 
else{alert("False")}; 
+1

使用'$('#myElement')。children('。myClass').length'更清晰,意义更明显,也更简单,可能更快。 – Bojangles 2012-01-15 01:30:17

相关问题