Как определить, существует ли конкретный ребенок (.haschild ('# test [att = "test"]')) с jQuery? - PullRequest
2 голосов
/ 14 января 2010
<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 ]

7 голосов
/ 14 января 2010
$('target').children('#test').length == 0

или

$('target > #test').length == 0
5 голосов
/ 14 января 2010

Вы можете протестировать несколько способов, вот один из них:

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
});

Вот рабочий пример

0 голосов
/ 24 апреля 2013

Изменяя найденный пример здесь для соответствия этому примеру, вы можете расширить 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...