MooTools — реализовать метод элемента

#mootools

#mootools

Вопрос:

 var parent = el.getParent();

parent.getElement('div[class=test]'); // return array

var parent1 = el.parentNode;

parent1.getElement('div[class=test]'); // error getElement is not a function
  

Кажется, parent1 не имеет всех методов элемента MooTools, как расширить все методы элемента parent1, как на странице

Примечание: я должен использовать parentNode.

Ответ №1:

parent.getElement('div[class=test]');

действительно должно быть

parent.getElement("div.test");

есть существенная разница между element.getParent() и element.parentNode — это сводится к Element prototype, который нельзя расширить в старых версиях IE.

mootools решает эту проблему, сохраняя ссылку на методы непосредственно в элементах вместо этого в качестве свойств.

следовательно, если вы это сделаете element.getParent() и это вернет element , это расширит его, чтобы иметь все прототипы. element.parentNode возвращает простой объект element, который будет работать в браузерах, где Element.prototype он наследуется правильно.

вы можете заставить второй метод работать в IE, выполнив:

 var parent1 = el.parentNode;
$(parent1).getElement("div.test");
  

Последующие ссылки на parent1 не нуждаются в $ (или document.id ), поскольку элемент уже будет расширен.

итак, чтобы подвести итог ответу:

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

 var parent = el.parentNode;
$(parent); // this extends it.

parent.getElements("div.test").something()
  

Ответ №2:

Оба способа отлично работают с элементом, доказательство:http://jsfiddle.net/SuJn6 /

Я предполагаю, что вы делаете неправильно, так это то, что ваш el на самом деле является коллекцией элементов, а не отдельным элементом. В этом случае вам нужно выполнить цикл для вашего первого массива и только затем использовать parentNode , пример: http://jsfiddle.net/35Fxf /

Подсказка: назовите вашу переменную тщательно, el и els — все имеет огромное значение.

Комментарии:

1. это первый раз, когда я вижу, что вы даете неправильный ответ на вопрос mootools! 🙂 единственный способ, которым это может работать в IE 6-8, — это если вы сделали var child = $(parent).getElement('div[id="b"]');

2. чешу в затылке . Действительно ли может быть, что весь мой код не работает в IE 6-8? 😉

3. ха-ха. зависит. вам может повезти. если вы предпочитаете element.inject(document.body) вместо document.body.adopt(element) (например) — не беспокойтесь. или если селектор передал элемент или вы его создали. вот почему люди иногда делают $(document.body) в классах

4. А, понятно. Я был уверен, что document.body это был один из тех нестандартных случаев, когда он не был расширен по соображениям производительности. На самом деле не знал, что было больше подобных случаев. Спасибо за разъяснение, Димитр! 🙂