如何判断jQuery节点是否位于其父节点的开头?

时间:2009-07-17 16:31:10

标签: javascript jquery html dom

给出以下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);
    }
});
使用sebasgo's help

修改,这是最终的代码和结果:

$("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 个答案:

答案 0 :(得分:2)

使用

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

希望这更好。

答案 1 :(得分:2)

以下代码将告诉您相关节点是否为“第一个孩子”,因此应该适合您。我一直在与类似的问题作斗争,这对我有用。

if($(this).prev().length)
{
    // Not first-child
} else {
    // is first-child
}

答案 2 :(得分:0)

试试这个条件:

($parent.contents().eq(0).attr("id") === $this.attr("id"))

答案 3 :(得分:0)

关于SO的类似问题。

How to match first child of an element only if it's not preceeded by a text node?

$("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);
});