我有一个包含一些
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>
我已经检查了this similar question,但最好的答案似乎依赖于当前脚本是’scripts’变量中的最后一个,因为下一个尚未加载.如果我用ajax请求附加html和js,情况就不是这样了.
要100%明确:问题是关于获取前一个对象而不引用任何特定属性:没有标签的唯一ID,没有随机id,因为理论上它总是有机会出现两次,没有唯一的类属性,如完全相同的组件可以显示在HTML文档的另一部分中.
解决方法
涉及两步过程的简单解决方案:
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>
这是一个很好的网络编程?不.您应该知道哪些元素应该根据您生成的内容应用效果.如果你有一个带有id的div,那个id是唯一的,你的生成器可以告诉它,如果它生成了div,它还必须生成为它设置jQuery效果的js.
但是,让我们忽略它;它有用吗?喜欢魅力.