Встроенный jQuery; выберите относительно тега сценария - PullRequest
9 голосов
/ 21 сентября 2011

Это немного глупо, поскольку оно противоречит интуитивно понятному освобождению разметки Javascript, однако я все равно спрошу.

Учитывая этот фрагмент:

<p>Hello</p>
<script type="text/javascript">
    $(document).ready(function(){
        $('relative-selector').next('p').hide();
    });
</script>
<p>World</p>

Этот фрагментбудет нацелен на тег <script> с помощью этого « относительного селектора », а .next('p').hide() приведет к скрытию <p>World</p>.

Существует ли « относительный селектор» ", или средство нацеливания на тег сценария, в котором находится данный фрагмент кода?

Ответ, который я ищу (, если такой существует ), не требует использованияid атрибут или любые такие идентифицирующие атрибуты;он будет работать с произвольным числом тегов <script> в данном документе, независимо от положения в дереве DOM.

Я видел некоторые странные реализации, которые не используют $(document).ready(), вместо этого полагаясь натот факт, что оставшаяся разметка не была загружена, с использованием $('script:last') или какой-либо такой смесиЭто не то, что я после, хотя;Я хотел бы .bind() некоторые обработчики для элементов, относящихся к фрагменту скрипта привязки (обычно после, поэтому выгруженный трюк разметки не будет работать )

$(this) простопредназначается для объекта document из-за обработчика ready.$(this) вне целей обработчиков с отложенной загрузкой window.

Я уже почти признал, что это, вероятно, невозможно, однако я уверен, что если какое-либо решение существует, оно витает в умахдругих пользователей SO.

Ответы [ 2 ]

7 голосов
/ 21 сентября 2011

Вероятно, вы можете вставить временный элемент, используя

document.write("<div id='temp' style='display: none'></div>")

, а затем использовать его, чтобы найти следующий элемент, используя jQuery.После этого вы можете удалить элемент.

$("#temp").next("p").doSomething();
$("#temp").remove();

Другой вариант - использовать метод, который вы предложили для частично загруженного документа, для получения ссылки на тег, но использовать его только при загрузке:

(function() {
    var thisScript = $('script:last');
    $(function() {
         thisSctipt.next("p").doSomething();
    });
})();
0 голосов
/ 21 сентября 2011

Я не думаю, что вы можете сделать относительный селектор для содержащего тега скрипта.

Имеется селектор jQuery для тегов скрипта: script[type*=javascript], вы можете попробовать добавить атрибут class или id к элементу (ам)

, который вы хотите скрыть, а затем написать селектор jQuery, чтобы выбрать все элементы

сразу после тега сценария и проверьте для каждого из этих элементов

, содержат ли они класс, указывающий, что они должны быть скрыты.

Прошло много времени с тех пор, как я работал с jQuery, поэтому вам придется извиниться, но я пока не могу предоставить вам пример кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...