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

时间:2011-09-21 07:25:44

标签: jquery jquery-selectors

这有点傻,因为它反对解放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属性或任何此类识别属性;无论DOM树中的位置如何,它都可以在给定文档中使用任意数量的<script>标记。

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

由于$(this)处理程序,

document只是针对ready对象。负载延迟处理程序之外的$(this)目标是window

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

2 个答案:

答案 0 :(得分:7)

您可以使用

插入临时元素
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();
    });
})();

答案 1 :(得分:0)

我认为您不能为包含脚本标记创建相对选择器。

脚本标记有一个jQuery选择器:script[type*=javascript],您可以尝试将类或id属性添加到要隐藏的

元素,然后将jQuery选择器写入在脚本标记之后立即选择所有

元素,并检查每个

元素是否包含指示它们应隐藏的类。

自从我使用jQuery已经有一段时间了,所以你不得不原谅我,但我现在无法为你提供代码示例。