Может ли jQuery выполнить оператор if? - PullRequest
0 голосов
/ 04 января 2011

Может ли jQuery выполнять функцию "если"? Например, если класс существует в одном пункте меню, применить этот класс к другому элементу меню? Это немного отличается от обычной подсветки меню активной страницы, так как я имею дело с активными выпадающими меню и дочерними страницами.

Что бы я хотел сделать, это

(the usual suspect) $(document).ready(function() {

Если ...

$('#menu-main-menu li.menu-item-1061') "contains the classes
current-menu-ancestor current-menu-parent"

    then add those same classes to, i.e.:

    $('#menu-main-menu li.menu-item-1099').addClass('current-menu-ancestor
current-menu-parent')

}); });

Должен быть способ, чтобы это работало ....

Ответы [ 4 ]

9 голосов
/ 04 января 2011

jQuery - это не язык, это библиотека для JavaScript.Ответ: «Да, в JavaScript есть if операторы как часть языка».

Я не понимаю написанную вами псевдологикуЧто вы подразумеваете под "Если [какой-то элемент списка] 'содержит классы' [foo] [bar]" ?Если элемент списка имеет оба этих класса?Любой из этих классов?Или если элемент списка имеет потомка хотя бы с одним из этих классов?Или, если элемент списка имеет одного или нескольких потомков, которые имеют все эти классы?

Вот решение, использующее одну интерпретацию:

jQuery(function($){
  var li = $('#menu-main-menu li.menu-item-1061');
  if ( li.find('.current-menu-ancestor, .current-menu-parent').length ){
    // do whatever you want here.
  }
});
2 голосов
/ 05 января 2011

Javascript может выполнять оператор if, но в jQuery вы можете использовать функцию is, чтобы определить, подходит ли какой-либо объект jquery другому выражению.*

и вы хотите проверить, соответствует ли какой-либо элемент этому выражению

".selector2"

, тогда вы можете использовать is следующим образом

firstObj.is(".selector2")

Если какой-либо элемент соответствуетответ будет «истинным», иначе «ложным».так что вы можете комбинировать с javascript if следующим образом

if (firstObj.is(".selector2")){
    // you can do something here
}

надеюсь, что это поможет

2 голосов
/ 05 января 2011

Как указывалось, if - это конструкция JavaScript, а не jQuery, в частности.Я думаю, что вам нужна функция jQuery hasClass, которая может проверять элементы DOM по имени класса и возвращает true, если элемент в данный момент имеет этот класс.

Вы можете использовать его следующим образом:

if (myElement.hasClass("myClass")) {
    // do something
}

Внутри конструкции if вы можете вставить код, который вы хотите, чтобы добавить классы к другим элементам.

Обновлено: Ваш пример немного странный, поскольку вы, похоже, хотите спросить: "Имеет ли набор элементов, сопоставленных с этим селектором, классы current-menu-ancestor и current-menu-parent?"Это странно, потому что вы соответствуете множеству элементов (ваш самый специфический селектор - это класс, поэтому может вернуть более одного элемента).Кажется, что у вас может быть ошибка проектирования в вашем HTML / CSS, так как класс menu-item-1061 звучит так, как будто это должен быть идентификатор (он уникален), а не класс.В любом случае, функция hasClass все равно будет работать для вас, поскольку она возвращает true, если любой из соответствующих элементов имеет класс.

2 голосов
/ 05 января 2011

Просто сделайте правильное if заявление о существовании этого?

$('#menu-main-menu li.menu-item-1061.current-menu-ancestor.current-menu-parent')
...