Mootools получают имя второго класса - PullRequest
3 голосов
/ 28 октября 2011

Я вижу метод получения имени второго класса с помощью jquery, но как мне это сделать в mootools, мой элемент <li class="parent active">

Мне нужно сопоставить полное имя класса, например li.parent.active, и отрегулировать высоту, если этот класс присутствует. Я пытался $$('li').hasClass('parent active') или getProperty, но все они возвращают true, даже если active отсутствует, если я добавлю .parent.active , я получу

Выражение не является юридическим выражением . теперь я должен поддерживать mootols 1.1, 1.2, 1.3, работая здесь на CMS, поэтому я начал с уродливой версии 1.1

вот как на самом деле нужно

var holderdiv =$('mymenu');
if($$('li.parent.active')){holderdiv.setStyle({'height':'50px'});

Ответы [ 2 ]

6 голосов
/ 28 октября 2011

if($$('li.parent.active') == true) возвращает истину как в, это правда (определено, а не ноль).

если вы хотите сказать: есть ли хотя бы один дочерний элемент с .parent и .active, вы можете сделать:

if (holderdiv.getElement("li.parent.active")) // at least one.
    holderDiv.setStyle("height", 50); // setStyle uses a value pair, not an object.

если они не являются детьми от holdivdiv, просто сделайте document.getElement или whateverElObj.getElement.

это вероятно сломается в 1.11 из-за старых вещей xpath.

Один из способов сделать это, чтобы он работал во всех версиях, был бы следующим (хотя вы должны делать это, только если MooTools.version неверен из-за снижения производительности двойных циклов):

var holderdiv = $("holderdiv");

if (holderdiv.getElements("li.parent").some(function(el){ return el.hasClass("active"); })) {
    // at least one.
    holderdiv.setStyle("height", 50);
}

.some будет проходить через все li.parent, пока не найдет тот, который соответствует условию (hasClass("active")), а затем вернет логическое значение true, иначе false.

http://jsfiddle.net/dimitar/BqwAk/

если вам нужно сохранить ссылку на список в коллекции, используйте .filter вместо:

var lis = holderdiv.getElements("li.parent").filter(function(el){ 
    return el.hasClass("active"); 
});

если у всех есть .parent и только один из них может быть активным, вам на самом деле все равно, поэтому вы можете просто сделать

if (holderdiv.getElement("li.active"))

или

if (holderdiv.getElement("li.active").hasClass("parent"))

... перепроверить, не у всех ли они .parent.

0 голосов
/ 28 октября 2011

Вы можете просто сопоставить все элементы с обоими классами parent и active и установить их стиль, MooTools делает это легко:

$$('li.parent.active').setStyle({'height':'50px'});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...