2010-10-16 9 views
3

Je cherche un moyen d'obtenir le décalage relatif à l'ensemble du document pour un nœud donné avec Javascript. Par exemple .:Obtenir le décalage du nœud dans le document html entier en Javascript?

<html> 
    <head></head> 
    <body> 
     <div id="mainContent"> 
      <h1 id="myTitle">Title</h1> 
      <p>First paragraph</p> 
      <p>Second <b>paragraph</b></p> 
     </div> 
    </body> 
</html> 

ensuite (en utilisant JQuery):

$("#myTitle").getDocumentOffset() 

devrait revenir 47 parce que le h1 avec id myTitle commence à l'offset 47 en caractères par rapport à l'ensemble du document.

Une idée de comment accomplir ceci?

Merci d'avance.

Répondre

7

Cette question n'a aucun sens car les espaces supplémentaires sont ignorés dans les documents HTML et la même page peut donc être représentée de plusieurs façons. Par exemple, ceci:

<html> 
    <body></body> 
</html> 

est équivalent à ceci:

<html><body></body></html> 

De plus, une fois que le navigateur a analysé votre code, il n'y a aucun moyen de récupérer le balisage HTML original (avec le même espace) c'était présent dans le fichier source. Cela signifie que le "décalage" que vous recherchez n'est pas défini de manière unique.

+0

Est-il jamais possible d'obtenir le HTML non analysé? Si oui, serait-il possible d'obtenir le décalage d'un corps taillé? (compter uniquement à partir du corps, pas d'espaces sauf les espaces) - Mise à jour: quand je m'enregistre $ ('html'). html(), les espaces semblent être réservés. Par exemple. quand j'ajoute 5 onglets, il montre ces 5 onglets. Il montre aussi Javascript, etc. – Tom

+0

Ou mieux: $ (document) .children(). Html() – Tom

+0

@Tom: Il n'y a aucune garantie que cela fonctionnera. Par exemple, Firefox semble conserver la mise en forme, tandis que IE et Chrome suppriment les espaces selon leur préférence. Et obtenir le décalage d'un "corps rogné" n'est pas facile: il faut essentiellement écrire son propre analyseur DOM. – casablanca

Questions connexes