JQuery - «Селектор» для текущей позиции в документе - PullRequest
5 голосов
/ 15 сентября 2009

Есть ли в JQuery селектор или функция, позволяющая выбрать «текущую позицию в документе»?

Например, если я использую

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

вывод будет помещен в документ HTML в «положение», где стоит этот «код». Но jQuery всегда требует специального селектора. Конечно, я мог бы использовать «маркер div» с уникальным селектором, но возможно ли также вставить HTML с JQuery прямо в то место, где находится выражение JQuery?

Я пытался

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

но это не работает. Помощь будет очень ценится, как это можно решить. Спасибо!

EDIT:

Относительно вопроса ниже: Идея состоит не в том, чтобы напрямую распечатать что-то с помощью document.writeln (это было больше указано в качестве примера), а в том, чтобы определить текущую "позицию" в документе с помощью jQuery (и не начинать с этой позиции с "навигацией / обходом" элементов с использованием функциональности jQuery.

Может быть, это можно назвать «относительным обходом элементов, начиная с текущей позиции в DOM Tree»?

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

ПРИМЕЧАНИЯ. Тег скрипта с инструкциями jQuery будет динамически вставляться в документ, и меня интересует возможность навигации с этой позиции в документе с помощью jQuery. В теге сценария я мог бы назвать что-то вроде «ОБРАТИТЬ СЛЕДУЮЩИЙ HTML-ЭЛЕМЕНТ С TAG VIA JQUERY» или «ДАЙТЕ МНЕ СЛЕДУЮЩЕЕ ЗНАЧЕНИЕ-ЭЛЕМЕНТОВ HTML-ЭЛЕМЕНТОВ». Как указано выше, можно вставить «маркер div» для определения позиции, но вопрос в том, может ли JQuery «автономно» определить свою позицию в DOM-дереве (чтобы начать навигацию «относительным образом» оттуда на).

Ответы [ 4 ]

3 голосов
/ 08 февраля 2011

$ ("script: last"), кажется, работает для всех современных браузеров (кроме 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>
1 голос
/ 15 сентября 2009

Если я правильно понимаю, вы хотите, чтобы функция работала точно так же, как document.write, я не понимаю, почему вы этого хотите, а не просто используете document.write тогда?

0 голосов
/ 16 сентября 2009

Я не знаю решения, использующего jQuery, но вы можете найти узел DOM в текущей позиции каретки в большинстве браузеров довольно легко, используя:

  • document.selection.createRange () в IE (см. MSDN)
  • window.getSelection (). FocusNode в большинстве других браузеров (Gecko et al., См. Статья MDC )

Удачи!

0 голосов
/ 15 сентября 2009

это просто: просто присвойте свой идентификатор тегу встроенного скрипта:

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

тогда вы можете просто сделать:

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

UPDATE:

, поскольку вы не хотите изменять разметку html, единственной альтернативой является доступ к тегам сценария в соответствии с их порядком появления в коде.

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

или вы можете получить доступ к определенному через .eq (index):

$('script').eq(2).after('hello world');  
// this is for the third script tag, starting from the top of the document.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...