Я пытаюсь изменить класс, сначала обнаружив, является ли он родительским объектом для определенного изображения, с помощью Mootools (клиенты предыдущего веб-разработчика, казалось, имели его для меня). Я не могу найти много хорошей документации по этому вопросу.

<div class="textwidget">
<img src="share.jpg">
</div>

До сих пор мне удалось найти все элементы div с помощью класса textwidget, используя:

var obs = $$('.textwidget');

Теперь мне нужно прокрутить их и выяснить, на каких хостах находится дочерний узел с src, перечисленным выше ...

for(var i=0;i<obs.length;i++){
    if(obs[i].childnode.src == 'share.jpg'){ // <-- non mootools syntax
        obs[i].class = 'new class'; // <-- non mootools syntax.
    }
}

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

Спасибо -J

0
Howard Zoopaloopa 25 Июн 2010 в 23:05

4 ответа

Лучший ответ

Я думаю, что вам нужно что-то вроде:

for(var i=0;i<obs.length;i++){
    if(obs[i].getChildren()[0].getProperty('src') == 'share.jpg'){ // <-- mootools syntax
        obs[i].setProperty('class','new class'); // <-- mootools syntax.
    }
}

Вы можете найти более подробную информацию здесь:

http://mootools.net/docs/core/Element/Element

1
edl 25 Июн 2010 в 19:19

Это то, что вы ищите:

$$('img[src=share.jpg]').getParent().set('class', 'newClass');
0
csuwldcat 10 Мар 2011 в 05:26

Здесь вы хотите отфильтровать массив элементов следующим образом:

$$('.text-widget').filter(function(e) {
    var child_img = e.getFirst('img');
    return $defined(child_img) && child_img.get('src') == 'share.jpg'
});

Если функция, переданная фильтру, возвращает true, элемент включается.

Вы также можете использовать селекторы в качестве одного из других упомянутых ответов. Хотя могут быть проблемы с производительностью при их использовании таким образом?

0
Nathan 28 Июн 2010 в 10:59

Вы можете сделать что-то подобное с помощью селектора / родительского комбо:

document.getElements("div.textwidget img[src=share.jpg]").getParent("div.textwidget");

http://www.jsfiddle.net/MBc37/4/

Или вы можете быть более тщательным / долгоиграющим ...

// css selector, divs array filtered by existance of a child img
results.mixedFilter = document.getElements("div.textwidget").filter(function(el) {
    return el.getElement("img[src=share.jpg]");
});

// checking vs img src properties of all child imgs
results.longwinded = [];
document.getElements("div.textwidget").each(function(el) {
    var imgs = el.getElements("img");
    if (!imgs.length) return;
    if (imgs.some(function(im) {
        return im.get("src") == "share.jpg";
    })) results.longwinded.push(el);
});
1
Dimitar Christoff 25 Июн 2010 в 19:50