2011-01-04 2 views
0

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

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

(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') 

}); }); 

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

ответ

9

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. 
    } 
}); 
+0

Это «псевдо-логика», потому что это единственный способ я знаю, как это описать. Похоже, это сработает, но я решил найти другой способ выполнить то, что мне нужно, с if-if-функцией php, чтобы определить класс тела страницы, а затем запустить add.Class. – markratledge

2

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

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

Как отмечалось, 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, если любой из соответствующих элементов имеет класс.

+0

Спасибо, мне придется больше смотреть в hasClass. Код из созданного Wordpress меню, и он имеет дело с различными видами активных пунктов меню и дочерних страниц. – markratledge

2

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

, например, у вас есть этот JQuery объект

var firstObj = $(".selector1") 

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

".selector2" 

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

firstObj.is(".selector2") 

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

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

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

+0

Спасибо, похоже, это сработает. Я закончил делать что-то другое с php и add.Class. – markratledge