Использование .closest () для вставки раньше - не работает - PullRequest
4 голосов
/ 14 ноября 2011

У меня есть следующая разметка в списке (повторяющегося идентичного формата списка):

    <li class="item">
        <div class="outer">
            <p>Some text</p>
            <div class="inner">Some div text</div>
        </div>
        <a class="link" href="#">Link</a>
    </li>

, и я хочу переместить a.link между p и div.inner в каждом элементе списка.

Я использую следующий скрипт:

    $("li.item a.link").each(function() {
        $(this).closest("div.inner").before(this);
    }); 

, но я только что получаю сообщение об ошибке: "$ (this) .closest не является функцией"

Почемуis .closest () не работает ... это часто рекомендуется.Есть ли другой способ достижения этого?

Большое спасибо.

1 Ответ

6 голосов
/ 14 ноября 2011

Попробуйте -

$("li.item a.link").each(function() {
    $(this).closest('li').find(".inner").before(this);
});

Это также будет работать, если closest не работает для вас -

$("li.item a.link").each(function() {
    $(this).parent('li').find(".inner").before(this);
});  

Демо - http://jsfiddle.net/MkD8j/2/

Обаиз них, находя ближайший родительский элемент li и затем ища его для внутреннего элемента div.Ваш исходный код искал элемент 'div.inner', используя функцию closest, которая находит родительские элементы, элемент 'div.inner' является родственным звеном ссылки, поэтому он ничего не нашел.

...