2009-07-17 3 views
1

den folgenden HTML Gegeben:Wie kann ich feststellen, ob ein jQuery-Knoten am Anfang des übergeordneten Knotens steht?

<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> 

Wie würde ich in der Lage sein zu sagen, dass $("img#one") zu Beginn des übergeordneten Knoten ist?

Im Idealfall, was ich versuche, dies zu tun:

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

Edit: mit sebasgo's help, hier ist der endgültige Code und Ergebnis:

$("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" /> 

Antwort

2

Verwenden

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

Hoffe, das funktioniert besser.

+0

Ich habe es gerade versucht: First-Kind und es gilt für alle 3 Fälle. – travis

+1

Wie ich sehe, ignoriert jQuery Textknoten in seiner Selektor-Engine. Dann solltest du plain javascript verwenden: var elem = document.getElementById ("# one"); if (elem == elem.parentNode.firstChild) {...} – sebasgo

+0

perfekt danke! da ich in einer .each() bin ging ich mit (this == this.parentNode.firstChild) – travis

0

Versuchen Sie, diese Bedingung:

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

Der folgende Code wird Ihnen sagen, wenn der betreffende Knoten die ‚first-child‘ ist oder sollte für Sie nicht so funktionieren. Ich habe gerade mit einem ähnlichen Problem gekämpft und das hat für mich funktioniert.

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

Das beachtet aber Textknoten nicht. – travis

+0

Ah ja, vielleicht hilft es dir nicht! Der Text ist kein Kind des Absatzes. – chrismacp

Verwandte Themen