Это - по крайней мере в настоящий момент - чисто экспериментирование, но мне любопытно: есть ли способ приложить методы (через прототипирование) к наборам элементов? Я тестировал следующие коды:Прикрепление прикованных методов к наборам элементов в JavaScript
<div>a</div>
<div>b</div>
<div>c</div>
<script>
NodeList.prototype._ = function(s)
{
for (x = 0; x < this.length; x++)
{
eval('this[x]' + '.' + s);
}
return this;
}
document.getElementsByTagName('div')._("style.backgroundColor = 'red'")._('innerHTML += x');
</script>
В настоящий момент он отлично работает в Opera; как и следовало ожидать, метод _ вызывается на всех элементах div, а затем eval(), передавая ему строку на каждый элемент по очереди. Обратите внимание, что метод _ позволяет связывать цепочку, и это было продемонстрировано также, вызывая _ для добавления предсказанной переменной итератора 10 к внутреннемуHTML каждого элемента.
Теперь два вопроса ...
Во-первых, есть лучший способ идти об этом? Я долгое время желал, чтобы я мог просто сделать document.getElementsByTagName('div').style.backgroundColor = "red";
, но, увы, этого еще не было. Вот почему я делаю это в первую очередь, и почему я назвал метод так лаконично; Я пытаюсь подражать ему как можно ближе.
Во-вторых, если предположить, что это разумное использование, как я могу заставить его работать в Firefox? Этот эквивалент браузера NodeList
- HTMLCollection
, но попытка прототипа последнего просто не удалась. Предложения?
Да, вам не нужно Eval для этого. Также, поскольку на самом деле у вас есть только 2 аргумента, почему бы не назвать их и использовать аргументы [] array? – BYK