использование .index () внутри hover () - PullRequest
1 голос
/ 28 октября 2009

У меня возникли проблемы с использованием .index() внутри функции .hover(). Спасибо за любую помощь.

    $("#myUL li").hover(    
        function () {

            //this logs a li element as it should
            $(this).log();

            //this reports that it's not a valid function, why?
            $("#myUL").index(this).log();

            //when i do it this way...
            var foo = $("#myUL").index(this);
            //this returns -1.  Why can't it find the li?
            $(foo).log();

        },
        function () {
        }
    );

Если это имеет значение, то этот код я использую для функции .log():

jQuery.fn.log = function (msg) {
    console.log("%s: %o", msg, this);
return this;
};

: изменить: в соответствии с комментарием, вот HTML:

    <ul id="myUL">
      <li>
        <div><img src="images/img1.jpg"/></div>
      </li>
      <li>
        <div><img src="images/img2.jpg"/></div>
      </li>
      <li>
        <div><img src="images/img3.jpg"/></div>
      </li>
    </ul>

1 Ответ

1 голос
/ 28 октября 2009

Обычно API jQuery состоит в том, чтобы связывать вещи. Это означает, что в обычном случае, в конце нативной функции или плагина jQuery, он возвращает сам себя. (через return this;). Это то, что позволяет jQuery использовать цепочку. Поскольку предыдущая функция возвращает исходный объект, следующая функция, которую вы запускаете в цепочке: также запускается для исходного объекта.

В случае функции $.index() возвращает значение. Это значение является целым числом, которое представляет его индекс. Для нативного целого числа функции log() нет. Цепочность возникает, когда предыдущая функция возвращает тип значения, для которого может быть вызвана следующая функция. (например, "string".substring(1).indexOf('i'))

В вашем коде вы можете сделать:

var $myUL = $("#myUL"),
    foo   = $myUL.index(this);

$myUL.get(foo).log();
...