перебирая множество элементов в jquery - PullRequest
3 голосов
/ 26 ноября 2009

$('form td .hint p') этот селектор jquery возвращает список [p,p,p,p,p,p].

Я хотел бы знать, как лучше всего пройтись по каждому из них, проверить их значения css и сделать что-нибудь, если значение css = то, что я хочу.

У меня есть эта функция, чтобы показать и скрыть всплывающую подсказку, но я хочу, чтобы одновременно отображалась только одна подсказка. Хотя mouseover и mouseout работают, он глючит, потому что в настоящее время я использую parent (), next () и child (), чтобы найти нужный элемент, и jquery мгновенно вставляет div, оборачивая вокруг элемента, который я показываю и скрываю , Поэтому я пытаюсь заставить все остальные элементы p, которые имеют display: block, скрывать каждый раз, когда происходит наведение мыши.

В настоящее время делаем это:

target = $('form td .hint p');
target[0].css('display') gives an error.

target.css('display') seems to only return the css of the first one.

1 Ответ

14 голосов
/ 26 ноября 2009

Использование each():

var displays = '';
$("p").each(function(i, val) {
  displays += "Paragraph " + i + ": " + $(this).css("display") + "\n";
});
alert(displays);

Причина, по которой это не удается:

var target = $("p");
var display = target[0].css("display");

означает, что target[0] является , а не объектом jQuery. Вы можете сделать это:

var display = $(target[0]).css("display");

Также, если вы прочитали документацию для css():

Возвращает свойство стиля на первом согласованный элемент.

Два других момента, о которых стоит упомянуть.

Во-первых, я бы не советовал делать подсказку самостоятельно. Получите один из многих плагинов для этого. Я использовал этот ранее, и он сделал свою работу.

Во-вторых, если вы проверяете значения отображения CSS, возможно, стоит использовать ярлык. Например, вы можете сделать это:

$("p").each(function() {
  if ($(this).css("display") == "none") {
    $(this).addClass("blah");
  }
});

, но вы также можете использовать селекторы :hidden и :visible, поэтому:

$("p:hidden").addClass("blah");

Проверка значений вызовов css() в значительной степени ненадежна, поскольку вы проверяете только встроенные стили, а не значения таблицы стилей.

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