2009-07-17 10 views
1

avec le code HTML suivant:Comment savoir si un noeud jQuery se trouve au début de son noeud parent?

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

Comment pourrais-je être en mesure de dire que $("img#one") est au début de son nœud parent?

Idéalement ce que je suis en train de faire est la suivante:

$("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: avec sebasgo's help, voici le code final et le résultat:

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

Répondre

2

Utilisez

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

Espérons que cela fonctionne mieux.

+0

Je viens d'essayer: first-child et c'est vrai pour les 3 cas. – travis

+1

Comme je le vois jQuery ignore les nœuds de texte dans son moteur de sélection. Ensuite, vous devez utiliser javascript simple: var elem = document.getElementById ("# one"); if (elem == elem.parentNode.firstChild) {...} – sebasgo

+0

parfait merci! puisque je suis dans un .each() je suis allé avec (ceci == this.parentNode.firstChild) – travis

0

Essayez cette condition:

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

Le code suivant vous dira si le nœud en question est le « premier enfant » ou pas devrait travailler pour vous. Je viens de me battre avec un problème similaire et cela a fonctionné pour moi.

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

Cela ne tient pas compte des nœuds de texte cependant. – travis

+0

Ah oui, peut-être que ça ne vous aidera pas! Le texte n'est pas réellement un enfant du paragraphe. – chrismacp

Questions connexes