内联jQuery; 选择相对于脚本标记

Dan*_*ugg 9 jquery jquery-selectors

这有点傻,因为它反对解放Javascript的标记,但不管怎么说我都会问.

鉴于此片段:

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

此片段将<script>使用此" 相对选择器 " 定位标记本身,.next('p').hide()并将导致<p>World</p>隐藏.

是否存在" 相对选择器 ",或者指定给定代码段所在的脚本标记的方法?

我正在寻找的答案(如果存在这样的答案)将不需要使用id属性或任何此类识别属性; <script>无论DOM树中的位置如何,它都可以在给定文档中使用任意数量的标记.

我已经看到了一些不使用的奇怪实现$(document).ready(),而是依赖于剩余标记未加载,使用$('script:last')或某些此类混合的事实.这不是我想要的; 我想要.bind()一些处理程序相对于绑定脚本片段的元素(通常在之后,这就是为什么卸载的标记技巧不起作用)

$(this)document由于ready处理程序而简单地定位对象.$(this)在负载延迟处理程序目标之外window.

我已经几乎已经接受了这可能是不可能的,但是我确定是否存在任何解决方案,它在SO用户的脑海中漂浮.

Ant*_*bry 7

您可以使用插入临时元素

document.write("<div id='temp' style='display: none'></div>")
Run Code Online (Sandbox Code Playgroud)

然后使用它来使用jQuery查找下一个元素.之后您可以删除元素.

$("#temp").next("p").doSomething();
$("#temp").remove();
Run Code Online (Sandbox Code Playgroud)

另一个选择是建立你为partialy加载的文档建议的技术,以检索对标记的引用,但仅在加载时使用它:

(function() {
    var thisScript = $('script:last');
    $(function() {
         thisSctipt.next("p").doSomething();
    });
})();
Run Code Online (Sandbox Code Playgroud)