как отфильтровать теги привязки, полученные из функции jquery .each () - PullRequest
2 голосов
/ 03 октября 2011

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

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

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

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

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

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

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

Спасибо

Ответы [ 4 ]

4 голосов
/ 03 октября 2011

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

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

});

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


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

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

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

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

2 голосов
/ 03 октября 2011

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

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

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

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

$.trim($(this).text());
1 голос
/ 03 октября 2011

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

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

});
1 голос
/ 03 октября 2011

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

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