jQuery el.each () возвращает HTMLAnchorElement вместо экземпляра элемента - PullRequest
4 голосов
/ 24 февраля 2012

У меня есть следующая схема HTML:

<section id="vids">
    <ul>
        <li>
            <a data-reference="12345" href="http://www.youtube.com/watch?v=12345" rel="external" target="_blank">
                <span>Video 14</span>
            </a>
        </li>
        <!-- ... -->
    </ul>
</section>

И следующая часть JavaScript:

$(document).ready(function() {
    console.log($("#vids a")); // Returns element instance collection

    $("#vids a").each(function(i, el) {
        console.log(this); // Returns HTMLAnchorElement instead of the element itself
        console.log(el); // Same here
        console.log(i); // Returns index
    });
});

Мне нужно использовать методы .removeAttr () и .attr (), но это не работает, потому что .each () возвращает прототип элемента вместо его экземпляра. Та же проблема с простым циклом for.

Ответы [ 2 ]

10 голосов
/ 24 февраля 2012

this относится к элементу DOM.Чтобы использовать функциональность jQuery для этого элемента, вам нужно обернуть его в объект jQuery, т.е.

3 голосов
/ 24 февраля 2012

Обтекание this примерно так: $(this) чтобы использовать его, как вы описываете.

Это ожидаемое поведение, описанное в jQuery документации :

Метод .each () предназначен для того, чтобы сделать циклические конструкции DOM краткими и менее подверженными ошибкам.При вызове он перебирает элементы DOM, которые являются частью объекта jQuery.Каждый раз, когда выполняется обратный вызов, ему передается текущая итерация цикла, начиная с 0. Более важно, что обратный вызов запускается в контексте текущего элемента DOM, , поэтому ключевое слово this относится к элементу .

...