Обтекание массива элементов - PullRequest
6 голосов
/ 28 декабря 2010

Я пытаюсь написать ненавязчивый скрипт и не хочу добавлять html, который не нужен, если не включен javascript.

Используя MooTools 1.2.4, возможно ли обернуть массив элементов, например, тегами?

Желаемый эффект:

До:

<p>Something</p>
<p>Something1</p>
<p>Something2</p>
<p>Something3</p>

JavaScript-код желаемого мышления:

$$('p').wrapWith(new Element('div', {id: 'master'}));

После того, как:

<div id="master">
  <p>Something</p>
  <p>Something1</p>
  <p>Something2</p>
  <p>Something3</p>
</div>

Ответы [ 3 ]

5 голосов
/ 28 декабря 2010

Ответ на канал IRC. Ответ добавлен для потомков.

Перебирайте элементы и используйте wraps ( Fiddle ):

var els = $$('p'),
    div = new Element('div', {id: 'master'});

els.each(function(e){ div.wraps(e) });

Или создайте метод Element, например wraps, который принимает Elements экземпляров ( Fiddle ):

Element.implement('surround', function(els, where){
    var elements = Array.slice(els), len = elements.length;
    for (var i = 0; i < len; i++){
        this.wraps(elements[i], where);
    }
    return this;
});

new Element('div', {id: 'master'}).surround($$('p'));
0 голосов
/ 16 января 2011

Мне нравится пример Кито. Здесь другое решение:

var div = new Element('div', {id: 'master'}); 
div.inject(document.body);
$$('p').inject(div);

http://jsfiddle.net/tofu/9wPp5/5/

Или с однострочником в MooTools 1.3

$$('p').inject(new Element('div#master').inject(document.body));
0 голосов
/ 28 декабря 2010

Это похоже на работу:

Пример: http://jsfiddle.net/9Pqv9/

var p = $$('p');
new Element('div',{id:'master'}).inject(p[0],'before').adopt(p);

Inject new Element перед первым p, затем укажите adopt всего набора p элементов.


Или это, который wraps первый p, затем принимает набор:

Пример: http://jsfiddle.net/9Pqv9/1/

var p = $$('p');
new Element('div', {id: 'master'}).wraps(p[0]).adopt(p);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...