2009-09-15 10 views
5

Gibt es in JQuery einen Selektor oder eine Funktion, mit der die "aktuelle Position im Dokument" ausgewählt werden kann?JQuery - "Selector" für die aktuelle Position im Dokument

Zum Beispiel, wenn ich

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

die Ausgabe im HTML-Dokument in der „Position“ gesetzt werden, wo dieser „Code“ steht. Aber jQuery benötigt immer einen speziellen Selektor. Natürlich könnte ich ein "marker div" mit einem eindeutigen Selektor verwenden, aber ist es auch möglich, HTML mit JQuery genau dort einzufügen, wo der JQuery-Ausdruck steht?

Ich versuchte

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

aber es funktioniert nicht. Hilfe würde sehr geschätzt werden, wie dies gelöst werden kann. Vielen Dank!

EDIT:

In Bezug auf die unten stehende Frage: Die Idee ist nicht direkt etwas mit document.writeln (es als ein Beispiel mehr gemeint war) zu drucken, aber die aktuelle „Position“ in dem Dokument mit jQuery, um zu bestimmen (und als unter Verwendung der Funktionalität jQuery auf mit „Navigation/Traversal“ von Elementen aus dieser Position zu starten.

Vielleicht kann dies ein „von der aktuellen Position relativ Traversal von Elementen auf dem DOM-Baum beginnend“ genannt werden?

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

HINWEISE: Das Skript-Tag mit den jQuery-Anweisungen wird dynamisch in das Dokument eingefügt, und ich interessiere mich dafür, von dieser Position aus im Dokument mit jQuery navigieren zu können. Im Skript Tag könnte ich etwas wie "WRAP THE NEXT HTML Element mit einem TAG VIA JQUERY" oder "GEBEN SIE MIR DAS NÄCHSTE HTML ELEMENTS VALUE-ATTRIBUTE" nennen. Wie oben erwähnt, ist es möglich, ein "marker div" einzufügen, um die Position zu bestimmen, aber die Frage ist, ob JQuery "autonom" in der Lage ist, seine Position im DOM-Baum zu bestimmen (von dort aus "relativ" anzufangen) auf).

+0

Warum nicht einfach fügen Klassen zu Ihrem divs zu arbeiten, so dass Sie einige Selektoren das Sie wollte finden verwenden?

Position2
PetersenDidIt

Antwort

3

$ („script: last“) scheint für alle modernen Browser (außer 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

Ich habe '$ ('Skript: erste'). ATTR ('ID)' und es hat mir die ID des Skripts den Code in ausgeführt wurde. Könnte helfen ! – Sevenearths

+0

Scratch das! Ich habe '$ ('script: first'). Text()' verwendet und es hat mir den Text des Skripts gebracht, aber aus irgendeinem Grund '$ (' script: first '). Attr (' id ') 'didn' t hol mich, es ist id. – Sevenearths

+0

Beachten Sie einige mögliche Probleme, wenn Sie Browsererweiterungen installiert haben. Zum Beispiel haben einige meiner Chrome-Erweiterungen Skripte zur Seite hinzugefügt (zum Beispiel "lastpass"), also war $ ("script: last") kein aktuelles Skript, sondern wurde von lastpass hinzugefügt –

1

Wenn ich das richtig verstehe, möchten Sie eine Funktion genau das gleiche wie document.write, ich verstehe nicht, warum Sie das wollen und nicht nur document.write dann verwenden?

+0

Das ist ein guter Punkt! – Ryall

+0

Hallo, ich habe meine Frage bearbeitet und versucht, diese Frage zu klären. Danke – Markus

0

es ist einfach: ein id-Attribut zu Ihrem Inline script-Tag geben:

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

dann können Sie einfach tun:

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

UPDATE:

da Sie don‘ Wenn Sie das HTML-Markup ändern möchten, besteht die einzige Alternative darin, auf die Skript-Tags entsprechend ihrer Reihenfolge im Code zuzugreifen.

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

oder Sie können auf einen bestimmten über zugreifen.eq (Index):

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

hellp Pixeline. Ich danke Ihnen sehr für Ihre Antwort. Nun, ich mag Ihre Lösung, aber am Ende ist es das gleiche wie mit einem Merker div (nur dass es das Div ... rettet) Das Problem mit diesem Ansatz ist wieder (wie die Div-Lösung), die ich generieren/zuweisen muss Ein eindeutiges ID-Attribut für das Skript-Tag. Das Ziel ist jedoch, ein "unverändertes/leeres Skript-Tag" mehrfach im Code zu platzieren. Und das würde nicht mit Ihrer Lösung funktionieren. danke markus – Markus

+0

Ich habe meine Antwort entsprechend Ihren Bedürfnissen aktualisiert. Kann nicht viel besser als das tun. – pixeline

0

Ich weiß nicht, eine Lösung mit jQuery, aber Sie können in den meisten Browsern den DOM-Knoten in der aktuellen Cursorposition herausfinden, ganz einfach mit:

  • document.selection .createRange() in IE (siehe MSDN)
  • window.getSelection(). focusNode in den meisten anderen Browsern (Gecko et al, siehe MDC Article)

Viel Glück!

+0

In dieser Frage geht es nicht um die Caret-Position. es ist über welche Skript-Tag der Browser Javascript ausführt von – Lathan