JQuery, чтобы выбрать, где нет детей или первый ребенок не изображение - PullRequest
2 голосов
/ 20 мая 2010

Я пытаюсь динамически стилизовать некоторые элементы на своих страницах. Итак, если бы у меня был следующий код:

<a href="#">
  Select Me
</a>

<a href="#">
  <img src="blah.jpg" />
  Don't select me
</a>

<a href="#">
 <div>Don't select me either</div>
 <img src="blah.jpg" />
</a>

<a href="#">
  <div>You can select me too.</div>
</a>

Я бы хотел выбрать первый и четвертый теги.

Из того, что я мог бы сказать, используя:

 $("a:first-child")

Не выберете первый тег, потому что у него нет дочерних элементов (только текст). Второй тег не должен быть выбран, поэтому что-то вроде:

$("a:first-child").not("img)

но это исключает первый пункт.

РЕДАКТИРОВАТЬ: Если в элементе A есть IMG, не выбирайте его.

Ответы [ 3 ]

9 голосов
/ 20 мая 2010

Если вы хотите выбрать все ссылки, у которых нет изображения в качестве первого дочернего элемента , используйте это:

$('a:not(:has(> img:first-child))')

Если вы хотите выбрать все ссылки, которые вообще не имеют изображения , используйте это:

$('a:not(:has(img))')
4 голосов
/ 20 мая 2010

Если я правильно понял ваш вопрос,

$("a:not(:has(img))");

http://api.jquery.com/not-selector/
http://api.jquery.com/has-selector/

<ч /> После ваших комментариев ниже, селектор, который я написал изначально, должен работать для вас.

1 голос
/ 20 мая 2010

Я не пробовал, но вы должны написать что-то вроде этого:

$("a").filter(function() {
    return $(this).filter("> img:first-child").length != 0;
})

Сначала будут выбраны все а, а затем отфильтрованы те, у которых img является первым дочерним.

UPDATE
Решение Nickf определенно яснее: -)
Я часто забываю, насколько универсален селектор jquery.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...