Как бы вы обнаружили, если элемент пустой, но имеет пробелы и возврат каретки, чтобы обрезать их с помощью JavaScript / jQuery? - PullRequest
0 голосов
/ 20 декабря 2011

Я пытаюсь использовать $.trim() для обрезки пробелов в пустых элементах, чтобы я мог проверить длину элемента, чтобы увидеть, есть ли в нем текстовое содержимое, и если нет, то удалить его из DOM.

Некоторые элементы возвращают длину больше 0, потому что в них есть пробелы и / или возврат каретки, и это все, что в них содержится.

Мне нужно найти и удалить все пустые тегикогда в них ничего нет

Не думаю, что кто-то знает простой быстрый способ просто проверить и удалить все пустые теги в основном содержимом страницы, независимо от того, содержат ли они пробельные символы или нет?Я уверен, что должен быть способ.

Ответы [ 4 ]

5 голосов
/ 20 декабря 2011

Вы хотите проверить наличие элементов только в body, так как в противном случае теги script и другие элементы, не содержащие содержимого, также удаляются: http://jsfiddle.net/6zdNf/1/.

// filter empty elements after trimming
$("body *").filter(function() {
    return $.trim($(this).html()) === "";
}).remove(); // remove them
1 голос
/ 20 декабря 2011

Попробуйте это:

$('body *').each(function(idx, element) {
    if ($(element).children().size() == 0) {
        if ($(element).text().trim() == "") {
            $(element).remove();
        }
    }
});

Возможно, вам придется немного подстроить селектор, но он должен это сделать.

1 голос
/ 20 декабря 2011

Просто используйте фильтр jQuery с функцией:

var rege = /\S/gi;
$('div').filter(function(){
  return rege.test($(this).text())
});

После использования этого кода у вас останутся только div с текстом! Обращайтесь с изображениями осторожно, так как на них нет текста!

Регулярное выражение /\S/gi тест для непробельного символа. Пустые теги не будут совпадать и вернут false.

1 голос
/ 20 декабря 2011
$('body *').each(function() {
    if (!$.trim($(this).text())) {
        $(this).remove();
    };
});

Не ожидайте, что он будет работать очень эффективно.

...