Как проверить, нет ли элемента div
Возможный дубликат:
Проверка того, что элемент html пуст с jQuery
У меня есть пустой div, подобный этому:
<div id="cartContent"></div>
Мне нужно проверить, не пуст ли он. Если он пуст, ему нужно вернуть true, а затем добавить некоторые элементы
. Если он не возвращает false и выполняет какую-либо другую функцию. Какой лучший способ проверить, есть ли какие-либо элементы
в div?
Спасибо
Ответы
Ответ 1
Вы можете использовать .is()
.
if( $('#leftmenu').is(':empty') ) {
Или вы можете просто проверить свойство length
, чтобы узнать, был ли найден найденный файл:
if( $('#leftmenu:empty').length ) {
Вы можете использовать $.trim()
для удаления пробелов (если это необходимо) и проверить длину содержимого.
if( !$.trim( $('#leftmenu').html() ).length ) {
Ответ 2
Использование простого javascript
var isEmpty = document.getElementById('cartContent').innerHTML === "";
И если вы используете jquery, это можно сделать, например
var isEmpty = $("#cartContent").html() === "";
Ответ 3
Как уже отмечалось, вы можете использовать :empty
в jQuery следующим образом:
$('#cartContent:empty').remove();
Он удалит div #cartContent
, если он пуст.
Но это и другие методы, которые люди предлагают здесь, могут не делать то, что вы хотите, потому что, если у них есть какие-либо текстовые узлы, содержащие пробелы, они не считаются пустыми. Итак, это не пусто:
<div> </div>
хотя вы можете считать его пустым.
У меня была эта проблема некоторое время назад, и я написал этот крошечный плагин jQuery - просто добавьте его в свой код:
jQuery.expr[':'].space = function(elem) {
var $elem = jQuery(elem);
return !$elem.children().length && !$elem.text().match(/\S/);
}
и теперь вы можете использовать
$('#cartContent:space').remove();
который удалит div, если он пуст или содержит только пробелы. Конечно, вы можете не только удалить его, но и делать что угодно, например
$('#cartContent:space').append('<p>It is empty</p>');
и вы можете использовать :not
следующим образом:
$('#cartContent:not(:space)').append('<p>It is not empty</p>');
Я вышел с этим тестом, который надежно сделал то, что я хотел, и вы можете вытащить его из плагина, чтобы использовать его как автономный тест:
Этот объект будет работать для объектов jQuery:
function testEmpty($elem) {
return !$elem.children().length && !$elem.text().match(/\S/);
}
Этот будет работать для узлов DOM:
function testEmpty(elem) {
var $elem = jQuery(elem);
return !$elem.children().length && !$elem.text().match(/\S/);
}
Это лучше, чем использование .trim
, потому что вышеприведенный код сначала проверяет, имеет ли тестируемый элемент какие-либо дочерние элементы, и если он пытается найти первый символ без пробелов, а затем останавливается, без необходимости читать или мутировать строка, если у нее есть даже один символ, который не является пробелом.
Надеюсь, что это поможет.
Ответ 4
Вы можете использовать функцию is
if( $('#cartContent').is(':empty') ) { }
или используйте длину
if( $('#cartContent:empty').length ) { }
Ответ 5
var empty = $("#cartContent").html().trim().length == 0;
Ответ 6
if ($("#cartContent").children().length == 0)
{
// no child
}