给出以下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" />
答案 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);
});