2009-09-15 8 views
5

Existe-t-il un sélecteur ou une fonction dans JQuery permettant de sélectionner la "position actuelle dans le document"?JQuery - "Sélecteur" pour la position actuelle dans le document

Par exemple, si j'utilise

<script>document.write("test");</script> 

la sortie sera placé dans le document HTML à la « position » où ce « code » signifie. Mais jQuery nécessite toujours un sélecteur spécial. Bien sûr, je pourrais utiliser un "div diviseur" avec un sélecteur unique, mais est-il également possible d'insérer du HTML avec JQuery directement à l'endroit où se trouve l'expression de JQuery?

J'ai essayé

<script>$(this).after("test");</script> 

mais il ne fonctionne pas. Aide serait très apprécié comment cela peut être résolu. Je vous remercie!

EDIT:

En ce qui concerne la question ci-dessous: L'idée est de ne pas imprimer directement quelque chose avec document.writeln (il était plus conçu comme un exemple), mais pour déterminer la « position » actuelle dans le document avec jQuery (et que à partir de cette position avec « navigation/traversal » d'éléments en utilisant la fonctionnalité jQuery.

peut-être que cela peut être appelé un « traversal relatif des éléments à partir de la position actuelle dans l'arbre DOM »?

<div>Position1</div> 
<div>Position2</div> 
<script> HOW TO GET THIS POSITION WITH JQUERY (SEE NOTES BELOW) TO FURTHER NAVIGATE FROM HERE ON (RELATIVELY) TO THE PREVIOUS OR NEXT ELEMENT</script> 
<div>Position3</div> 
<div>Position4</div> 

NOTES: La balise de script avec les instructions jQuery sera insérée dynamiquement dans le document et ce qui m'intéresse c'est de pouvoir naviguer à partir de cette position dans le document avec jQuery. Dans le script Tag, je pourrais appeler quelque chose comme "WRAP LE PROCHAIN ​​ELEMENT HTML AVEC UNE ÉTIQUETTE VIA JQUERY" ou "DONNER MOI LA PROCHAINE ÉLÉMENTS HTML VALEUR-ATTRIBUTE". Comme indiqué ci-dessus, il est possible d'insérer un "marqueur div" pour déterminer la position mais la question est, si JQuery est "autonome" de déterminer sa position dans l'arbre DOM (pour commencer la navigation de manière "relative") sur).

+0

Pourquoi ne pas simplement ajouter des classes à vos divs si vous avez des sélecteurs à utiliser trouver celui que vous vouliez?

Position2
PetersenDidIt

Répondre

3

$ (« Script: dernières ») semble fonctionner pour tous les navigateurs modernes (sauf IE)

<html> 
<head> 
    <title>test</title> 
    <script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery/jquery-1.5.min.js"></script> 
</head> 
<body> 
    <script type="text/javascript"> 
    document.write($("script:last").text()); 
    </script> 
    <script type="text/javascript"> 
    document.write("---"); 
    document.write($("script:last").text()); 
    </script> 
</body> 
+0

J'ai utilisé '$ ('script: first'). Attr ('id)' et il m'a donné l'ID du script dans lequel le code a été exécuté. ! – Sevenearths

+0

Grattez ça! J'ai utilisé '$ ('script: first'). Text()' et j'ai obtenu le texte du script, mais pour une raison curieuse '$ ('script: first'). Attr ('id')' didn ' t m'obtiens c'est id. – Sevenearths

+0

Soyez conscient de certains problèmes potentiels si vous avez installé des extensions de navigateur. Par exemple certaines de mes extensions chrome ont ajouté des scripts à la page ("lastpass" par exemple), donc $ ("script: last") n'était pas un script courant mais ajouté par lastpass –

1

Si je comprends bien, vous voulez qu'une fonctionnalité fasse exactement la même chose que document.write, je ne comprends pas pourquoi vous le voulez et n'utilisez pas seulement document.write alors?

+0

C'est un bon point! – Ryall

+0

Bonjour, J'ai édité ma question et j'ai essayé de clarifier cette question. Merci – Markus

0

il est facile: il suffit de donner un attribut id à votre balise de script en ligne:

<script id="hello">alert("hello");</script> 

alors vous pouvez juste faire:

$('script#hello').after('<span style="color:red">this is my new content</span>'); 

MISE À JOUR:

puisque vous n » Si vous souhaitez modifier le balisage html, la seule alternative est d'accéder à vos balises de script en fonction de leur ordre d'apparition dans le code.

$('script').each(function(index){ 
// "index" gives you the instance number, which you could use, for example inside a switch case. 
switch(index){ 
case '1': 
    $(this).after('<span style="color:red">i am number 1</span>'); 
break; 

case '2': 
    $(this).after('<span style="color:red">i am number 2</span>'); 
break; 

default: 
    $(this).after('<span style="color:red">i am number '+index+'</span>'); 
break; 
} 
    }); 

ou vous pouvez accéder à un spécifique via.eq (indice):

$('script').eq(2).after('hello world'); 
// this is for the third script tag, starting from the top of the document. 
+0

hellp Pixeline. Merci beaucoup pour votre réponse. Eh bien j'aime ta solution, mais à la fin ça revient à utiliser un merker div (seulement qu'il enregistre le div ...) Le problème avec cette approche est encore une fois (comme la solution div) que j'ai besoin de générer/assigner un attribut d'identifiant unique à l'étiquette de script. L'objectif est cependant d'avoir une "balise script inaltérée/vide" placée plusieurs fois dans le code. Et cela ne fonctionnerait pas avec votre solution. merci Markus – Markus

+0

J'ai mis à jour ma réponse en fonction de vos besoins. Je ne peux pas faire mieux que ça. – pixeline

0

Je ne sais pas une solution en utilisant jQuery, mais vous pouvez trouver le nœud DOM dans la position actuelle du curseur dans la plupart des navigateurs assez facilement en utilisant:

  • document.selection .createRange() dans Internet Explorer (voir MSDN)
  • window.getSelection(). focusNode dans la plupart des autres navigateurs (Gecko et al, voir MDC Article)

Bonne chance!

+0

cette question ne concerne pas la position du curseur. il s'agit de l'étiquette de script que le navigateur exécute javascript depuis – Lathan

Questions connexes