在(jquery)ajax请求中获取当前脚本DOM对象

Luc*_*s T 7 javascript tags reflection jquery

我有一个包含一些javascript的html组件.

该组件是模板引擎中的文件,因此可以使用它

  • 在整个html页面的初始渲染中
  • 作为通过ajax请求呈现的独立html

javascript应该应用于模板中的对象,即:

<div class="grid" >
  <div class="item" id="item_13">
      This is item 13
  </div>
  <div class="item" id="item_14">
      This is item 14
  </div>
</div>
<script type="text/javascript">
    $(document).ready(function(){
       $(HOW_DO_I_GET_PREVIOUS_ELEMENT???).someEffect(params)
    })
</script>
Run Code Online (Sandbox Code Playgroud)

我已经检查了这个类似的问题,但最好的答案似乎依赖于当前脚本是'scripts'变量中的最后一个,因为下一个尚未加载.如果我用hjax请求附加html和js,情况就不会如此.

要100%明确:问题是关于获取前一个对象而不引用任何特定属性:没有标签的唯一ID,没有随机id,因为理论上它总是有机会出现两次,没有唯一的类属性,如完全相同的组件可以显示在HTML文档的另一部分中.

Mik*_*ans 6

涉及两步过程的简单解决方案:

1)找出脚本标签的元素

2)找到该元素的先前兄弟

在代码中:

<div id="grid">
    <!-- ... -->
</div>
<script type="text/javascript">
    var scripts = document.getElementsByTagName("script");
    var current = scripts[scripts.length-1];
    var previousElement = current.previousSibling;
    // there may be whitespace text nodes that should be ignored
    while(previousElement!==null && previousElement.nodeType===3) {
        previousElement = previousElement.previousSibling; }
    if(previousElement!==null) {
        // previousElement is <div id="grid"> in this case
        $(document).ready(function(){
            $(previousElement).someEffect(params);
        });
    }
</script>
Run Code Online (Sandbox Code Playgroud)

这是一个很好的网络编程吗 不可以.您应该知道哪些元素应该根据您生成的内容应用效果.如果你有一个带有id的div,那个id是唯一的,你的生成器可以告诉它,如果它生成了div,它还必须生成为它设置jQuery效果的js.

但是,让我们忽略它; 它有用吗?喜欢魅力.