Простой вопрос, у меня есть элемент, который я хватаю .getElementById ()
. Как мне проверить, есть ли у него дети?
источник
Простой вопрос, у меня есть элемент, который я хватаю .getElementById ()
. Как мне проверить, есть ли у него дети?
Пару способов:
if (element.firstChild) {
// It has at least one
}
или hasChildNodes()
функция:
if (element.hasChildNodes()) {
// It has at least one
}
или length
собственность childNodes
:
if (element.childNodes.length > 0) { // Or just `if (element.childNodes.length)`
// It has at least one
}
Если вы хотите знать только о дочерних элементах (в отличие от текстовых узлов, узлов атрибутов и т. Д.) Во всех современных браузерах (и IE8 - фактически, даже IE6), вы можете сделать это: (спасибо, Флориан !)
if (element.children.length > 0) { // Or just `if (element.children.length)`
// It has at least one element as a child
}
Это зависит от children
собственности, которая не была определена в DOM1 , DOM2 , или DOM3 , но имеет практически универсальную поддержку. (Он работает в IE6 и выше, а также в Chrome, Firefox и Opera, по крайней мере, еще в ноябре 2012 года, когда он был изначально написан.) Если вы поддерживаете старые мобильные устройства, обязательно проверьте наличие поддержки.
Если вам не нужна поддержка IE8 и более ранних версий, вы также можете сделать это:
if (element.firstElementChild) {
// It has at least one element as a child
}
Это полагается на firstElementChild
. Мол children
, он не был определен и в DOM1-3, но в отличие от children
него не был добавлен в IE до IE9.
Если вы хотите придерживаться чего-то определенного в DOM1 (возможно, вам нужно поддерживать действительно малоизвестные браузеры), вам нужно проделать больше работы:
var hasChildElements, child;
hasChildElements = false;
for (child = element.firstChild; child; child = child.nextSibling) {
if (child.nodeType == 1) { // 1 == Element
hasChildElements = true;
break;
}
}
Все это является частью DOM1 и поддерживается почти повсеместно.
Было бы легко обернуть это функцией, например:
function hasChildElement(elm) {
var child, rv;
if (elm.children) {
// Supports `children`
rv = elm.children.length !== 0;
} else {
// The hard way...
rv = false;
for (child = element.firstChild; !rv && child; child = child.nextSibling) {
if (child.nodeType == 1) { // 1 == Element
rv = true;
}
}
}
return rv;
}
children
был добавлен только в DOM4. Зная, что он поддерживается в любом известном браузере, я подумал, что это в значительной степени DOM0 / 1.div
элементаdiv
определенный классxyz
?for (child = element.firstChild; child; child = child.nextSibling )
, проголосовал. Спасибо, TJelement.firstChild
чтобы не былоnull
когдаelement.children.length
есть0
:firstChild
и это относится к узлам, включая элементы, текстовые узлы, комментарии и т. Д .;children
это просто список дочерних элементов . В современных браузерах вы можете использоватьfirstElementChild
вместо этого.Как упоминают slashnick и bobince,
hasChildNodes()
вернет true для пробелов (текстовых узлов). Однако я не хотел такого поведения, и это сработало для меня :)Изменить : для той же функциональности это лучшее решение:
children[]
является подмножествомchildNodes[]
, содержащим только элементы.Совместимость
источник
Вы можете проверить, есть ли у элемента дочерние узлы
element.hasChildNodes()
. Будьте осторожны в Mozilla, это вернет true, если после тега стоит пробел, поэтому вам нужно будет проверить тип тега.https://developer.mozilla.org/En/DOM/Node.hasChildNodes
источник
Вы также можете сделать следующее:
Он использует метод trim () для обработки пустых элементов, которые имеют только пробелы (в этом случае
hasChildNodes
возвращает true) как пустые.Демо JSBin
источник
Поздно, но фрагмент документа мог быть узлом:
См.
Https://github.com/k-gun/so/blob/master/so.dom.js#L42
https://github.com/k-gun/so/blob/master/so.dom.js # L741
источник
Попробуйте свойство childElementCount :
источник
Многоразовая
isEmpty( <selector> )
функция.Вы также можете запустить его для набора элементов (см. Пример)
возвращает
true
(и выходит из цикла), как только в одном элементе появляется какое-либо содержимое, кроме пробелов или новой строки.источник
источник