2012-01-15 98 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

相關問題