цикл по набору элементов в jquery

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

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

У меня есть эта функция для отображения и скрытия всплывающей подсказки, но я хочу, чтобы за раз отображалась только одна всплывающая подсказка. При наведении указателя мыши и наведении указателя мыши он работает с ошибками, потому что в настоящее время я использую 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.

person Chris    schedule 26.11.2009    source источник
comment
Вы видели множество плагинов jQuery, которые предлагают функции всплывающих подсказок? Например, docs.jquery.com/Plugins/Tooltip?   -  person Jason Aller    schedule 26.11.2009


Ответы (1)


Используйте 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 и _ 9_, поэтому:

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

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

person cletus    schedule 26.11.2009
comment
Эй, на самом деле я только что сообразил, что использование селектора: visible сработало. Спасибо за ответ, потому что мне нужна функция each () для чего-то еще. Спасибо. - person Chris; 26.11.2009