как фильтровать теги привязки, полученные от функции jquery .each()

У меня есть div, содержащий множество тегов привязки.

Некоторые из них имеют img в качестве внутренней стороны тега.

Мне нужно получить все «а», в которых есть обычный текст, а не тег изображения или любой другой тег HTML.

Как это можно сделать с помощью jquery.

Чтобы получить их все, я просто делаю:

$(element).find('a').each(function () {
 ...........
});

Но как мне отфильтровать их, используя функцию .text() или что-то еще.

Спасибо


person Ovi    schedule 03.10.2011    source источник


Ответы (4)


Вы можете использовать not и has селекторы

$(element).find('a').filter(':not(:has(*))').each(function() {

});

Это говорит: «Найти a элементов, затем отфильтровать этот выбор до тех, у которых нет дочерних элементов». :has(*) означает «выбрать элементы, у которых есть дочерние элементы», поэтому :not(:has(*)) означает «выбрать элементы, у которых нет дочерних элементов».


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

$(element).find('a:not(:has(*))').each...

Однако это означает, что querySelectorAll работать не будет, поэтому выделение будет значительно медленнее.

Живой пример на jsbin

person lonesomeday    schedule 03.10.2011

Вы можете использовать метод .filter, чтобы отфильтровать соответствующий набор элементов, чтобы он содержал только элементы с текстом:

$("#example").find('a').filter(function () {
    return $(this).text();
}).each(function() {
    //Do stuff
});

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

Небольшая проблема с вышеизложенным может заключаться в том, что $(this).text() будет оцениваться как true, если в элементе a присутствует какой-либо текстовый узел. Это включает в себя одно пустое пространство. Чтобы предотвратить это, вы можете обрезать текст:

$.trim($(this).text());
person James Allardice    schedule 03.10.2011

Попробуйте это просто и легко

$(element).find('a').not(":has('img')").each(function () {
 ...........
});
person gtamil    schedule 03.10.2011

Идея: в каждом блоке сделать проверку так:

$(element).find('a').each(function () {
if($(this).text() == $(this).html())
{
...........
}

});
person Narek Malkhasyan    schedule 03.10.2011