我有一个包含一些
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.
但是,让我们忽略它;它有用吗?喜欢魅力.