Как я могу узнать, находится ли узел jQuery в начале его родительского узла? - PullRequest
1 голос
/ 17 июля 2009

С учетом следующего HTML:

<p><img id="one" alt="at beginning, return true" />Some Text</p>
<p>Some <img id="two" alt="in middle, return false" />Text</p>
<p>Some Text<img id="three" alt="at end, return false" /></p>

Как бы я мог сказать, что $("img#one") находится в начале его родительского узла?

В идеале я пытаюсь сделать следующее:

$("p>img").each(function () {
    var $this = $(this);
    var $parent = $this.parent();
    if ("$this is at the beginning of $parent.html()") {
        $parent.before($this);
    } else {
        $parent.after($this);
    }
});

Редактировать: с помощью Себасго , вот окончательный код и результат:

$("p>img").each(function () {
    var $this = $(this);
    var $parent = $this.parent();
    if (this == this.parentNode.firstChild) {
        $parent.before($this);
    } else {
        $parent.after($this);
    }
});

<img id="one" alt="at beginning, return true" />
<p>Some Text</p>
<p>Some Text</p>
<img id="two" alt="in middle, return false" />
<p>Some Text</p>
<img id="three" alt="at end, return false" />

Ответы [ 4 ]

2 голосов
/ 06 августа 2010

Следующий код скажет вам, должен ли рассматриваемый узел быть «первым ребенком» или нет, он должен работать для вас. Я только что боролся с подобной проблемой, и это сработало для меня.

if($(this).prev().length)
{
    // Not first-child
} else {
    // is first-child
}
2 голосов
/ 17 июля 2009

Используйте

var elem = $("img#one").get(0)
if (elem.parentNode.firstChild == elem)
{ .... }

Надеюсь, это работает лучше.

0 голосов
/ 17 июля 2009

Из аналогичного вопроса по SO.

Как сопоставить первый дочерний элемент, только если ему не предшествует текстовый узел?

$("p>img").each(function () {
    var prev = this.previousSibling;
    var isThisTheFirstNode = $(this).parent().html().toUpperCase().indexOf('<IMG>') == 0;

    var method = isThisTheFirstNode ? 'before' : 'after';
    $(this).parent[method].before(this);
});
0 голосов
/ 17 июля 2009

Попробуйте это условие:

($parent.contents().eq(0).attr("id") === $this.attr("id"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...