如何判断是否有一个特定的孩子(.haschild('#test [att =“test”]'))与jQuery?

时间:2010-01-14 05:35:34

标签: jquery

<div id="target">
<div id="test" att="test"></div>
</div>

$('target').haschild('#test')应为true

$('target').haschild('#test[att="test"]')应为true

$('target').haschild('#no')应为false

只有$('target')可用。

3 个答案:

答案 0 :(得分:7)

$('target').children('#test').length == 0

$('target > #test').length == 0

答案 1 :(得分:5)

你可以测试几种方法,这里有一种方法:

if($("#target > #test").length){
   //true
} else {
   //false
}

如果您使用jQuery插件,您实际上可以使用您在示例中使用的语法:

$.fn.haschild = function(selector){
  return ($("> " + selector, this).length > 0);
}

$(function(){
  alert($('#target').haschild('#test')); // Alerts true
  alert($('#target').haschild('#test[att="test"]'));  // Alerts true
  alert($('#target').haschild('#no'));  // Alerts false
});

Here is a working example

答案 2 :(得分:0)

修改一个示例here以适应此示例,您可以扩展JQuery以获得一个新的:haschild选择器以及方法

您可以使用$('#target:haschild(#test)')以及.haschild('#test')

$.fn.haschild = function(selector){
      function filterMethod(){
            if (selector) {
                  return $(this).children(selector).length >= 1;
            }
            return $(this).children().length >= 1;            
      }
      return this.filter(filterMethod);
}
$.expr[':'].haschild = function(objNode,intStackIndex,arrProperties,arrNodeStack){      
      var selector = arrProperties[3];
      if (selector) {
            return $(objNode).children(selector).length >= 1;
      }
      return $(objNode).children().length >= 1;
}