2009-09-15 16 views
5

Czy istnieje selektor lub funkcja w JQuery, która pozwala wybrać "aktualną pozycję w dokumencie"?JQuery - "Selector" dla aktualnej pozycji w dokumencie

Na przykład, jeśli mogę użyć

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

wyjście zostanie umieszczony w dokumencie HTML w „pozycji”, w której to „code” stoi. Ale jQuery zawsze wymaga specjalnego selektora. Oczywiście mógłbym używać "znacznika div" z unikalnym selektorem, ale czy możliwe jest wstawienie kodu HTML z JQuery bezpośrednio w miejscu, gdzie znajduje się wyrażenie JQuery?

Próbowałem

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

ale to nie działa. Pomoc byłaby bardzo doceniona, jak można to rozwiązać. Dziękuję Ci!

EDIT:

Odnośnie poniżej pytania: Pomysł nie jest bezpośrednio wydrukować coś z document.writeln (to było bardziej pomyślane jako przykład), ale do określenia obecnego „position” w dokumencie z jQuery (i niż zaczynając od tej pozycji na z „nawigacja/przechodzenie” elementów przy użyciu funkcji jQuery.

może to można nazwać „względna przejścia elementów począwszy od bieżącego położenia na w drzewa 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> 

UWAGI: Znacznik skryptu z instrukcjami jQuery zostanie wstawiony dynamicznie w dokumencie i tym, co mnie interesuje, aby móc nawigować z tej pozycji w dokumencie za pomocą jQuery. W tagu skryptu mogę nazywać coś takiego jak "WRAP THE NEXT HTML ELEMENT WITH A TAG VIA JQUERY" lub "DAĆ MI NASTĘPNY HTML ELEMENTS VALUE-ATTRIBUTE". Jak wspomniano powyżej, możliwe jest wstawienie "znacznika div" w celu określenia pozycji, ale pytanie brzmi, czy JQuery jest "autonomicznie" w stanie określić jego pozycję w DOM-Tree (aby rozpocząć nawigację w "względny sposób" z tego miejsca na).

+0

Dlaczego nie wystarczy dodać klas do div tak masz kilka selektorów korzystania znaleźć taki chciałeś?

Position2
PetersenDidIt

Odpowiedz

3

$ („Scenariusz: Last”) wydaje się działać dla wszystkich nowoczesnych przeglądarek (z wyjątkiem 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

Użyłem '$ ('script: first') .attr ('id)' i dostałem identyfikator tego skryptu, w którym kod został uruchomiony. Może pomóc ! – Sevenearths

+0

Zdrap to! Użyłem '$ ('script: first'). Text()' i dostałem tekst skryptu, ale z jakiegoś ciekawego powodu '$ ('script: first'). Attr ('id')' didn ' t dostaję ode mnie, że to id. – Sevenearths

+0

Pamiętaj o potencjalnych problemach, jeśli masz zainstalowane rozszerzenia przeglądarki. Na przykład niektóre moje rozszerzenia chrome dodały skrypty do strony (na przykład "lastpass"), więc $ ("script: last") nie był bieżącym skryptem, ale dodanym przez lastpass –

1

Jeśli dobrze rozumiem, chcesz, aby funkcja działała dokładnie tak samo, jak document.write, nie rozumiem, dlaczego tego chcesz, a nie używasz tylko document.write?

+0

To dobry punkt! – Ryall

+0

Witam, zredagowałem moje pytanie i próbowałem wyjaśnić to pytanie. Dzięki – Markus

0

to proste: wystarczy podać atrybut id do tagu skryptu inline:

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

następnie można po prostu zrobić:

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

UPDATE:

od don” t chcesz zmodyfikować znaczniki html, a jedyną alternatywą jest dostęp do tagów skryptu zgodnie z kolejnością ich występowania w kodzie.

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

lub możesz uzyskać dostęp do określonego przez.eq (index):

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

pixel Pixeline. Bardzo dziękuję za odpowiedź. Cóż, podoba mi się twoje rozwiązanie, ale w końcu to samo, co użycie div merkera (tylko, że zapisuje div ...) Problem z tym podejściem jest po raz kolejny (jak rozwiązanie div), który muszę wygenerować/przypisać unikalny atrybut ID tagu skryptu. Celem jest jednak umieszczenie "niezmienionego/pustego znacznika skryptu" wiele razy w kodzie. A to nie będzie działać z twoim rozwiązaniem. dzięki markus – Markus

+0

zaktualizowałem swoją odpowiedź zgodnie z potrzebami. Nie można zrobić nic lepszego. – pixeline

0

nie wiem rozwiązanie przy użyciu jQuery, ale można dowiedzieć się węzeł DOM w aktualnej pozycji karetki w większości przeglądarek dość łatwo za pomocą:

  • document.selection .createRange() w IE (patrz MSDN)
  • window.getSelection(). focusNode w większości innych przeglądarek (Gecko wsp patrz MDC Article)

Powodzenia!

+0

to pytanie nie dotyczy stanowiska opiekuńczego. chodzi o to, który znacznik skryptu uruchamia przeglądarkę javascript z – Lathan

Powiązane problemy