Javascript JQuery树遍历-向上遍历树,而不是向下遍历树
我试图使用Javascript JQuery树遍历-向上遍历树,而不是向下遍历树,javascript,jquery,html,tree,traversal,Javascript,Jquery,Html,Tree,Traversal,我试图使用$(document.currentScript)从脚本标记向上遍历树,然后选择输入元素向下遍历树。我试过很多种从树上下来的方法,但都不管用。我能够得到最上面的div,$(document.currentScript).closest(“div”).parent(“div”),但没有成功 <div id="p9t2c13"> <div class="control"> <label for="c13"> <h
$(document.currentScript)
从脚本标记向上遍历树,然后选择输入元素向下遍历树。我试过很多种从树上下来的方法,但都不管用。我能够得到最上面的div,$(document.currentScript).closest(“div”).parent(“div”)
,但没有成功
<div id="p9t2c13">
<div class="control">
<label for="c13">
<h3> HiddenInstanceId </h3>
<p>
<script>
if (typeof counter == "undefined") {
counter = 0;
}
counter++;
var test = $(document.currentScript).closest("div").parent("div");
console.log($(test).find("input"))
</script>
</p>
</label>
<p class="ctrlinvalidmessage"></p>
<fieldset>
<div class="input text">
<input id="c13" type="text" name="c13" value="" maxlength="1000">
</div>
</fieldset>
</div>
</div>
HiddenInstanceId
if(计数器类型==“未定义”){
计数器=0;
}
计数器++;
var test=$(document.currentScript).closest(“div”).parent(“div”);
console.log($(test.find(“输入”))
听起来您可能有一个解决方案,但这里有另一种使用基本相同代码的方法。将当前脚本值存储在变量中,然后在文档就绪回调中引用该值:
<div id="p9t2c13">
<div class="control">
<label for="c13">
<h3> HiddenInstanceId </h3>
<p>
<script>
(function(){
var thisScript = $(document.currentScript);
$(function(){
var test = thisScript.closest("div").parent("div");
console.log($(test).find("input"))
});
})();
</script>
</p>
</label>
<p class="ctrlinvalidmessage"></p>
<fieldset>
<div class="input text">
<input id="c13" type="text" name="c13" value="" maxlength="1000">
</div>
</fieldset>
</div>
</div>
HiddenInstanceId
(功能(){
var thisScript=$(document.currentScript);
$(函数(){
var测试=thisScript.closest(“div”).parent(“div”);
console.log($(test.find(“输入”))
});
})();
如果在查找位于当前脚本下方的内容之前等待$(document).ready()
,则可以正常工作。它在这里工作:
HiddenInstanceId
if(计数器类型==“未定义”){
计数器=0;
}
计数器++;
var test=$(document.currentScript).closest(“div”).parent(“div”);
//变化如下:
$(document).ready(function(){console.log(test.find(“input”);});
console.log(测试)的功能是什么;return?需要注意的是,如果脚本中的代码被作为回调或事件处理程序调用,那么它将不会引用元素;它将仅在元素最初被处理时引用该元素。好的,但它既不是回调也不是事件处理程序……嗯……它没有接收输入——我认为这与DOM准备就绪有关。如果我将输入放在.control
元素之前,它会找到输入-我甚至可以使用test.find('input').val('test')更改输入值代码>。但是,如果我添加了文档加载包装器$(function(){/*code here*/}
,那么它将被用作回调,@Legends指出,回调并不引用脚本。您不能创建一个在文档加载后处理的脚本来处理此脚本的功能吗(比如在解析DOM后可能需要更改的所有元素中循环)?@mark.hch是正确的。事实证明,查找其他元素(例如test.find('div')
或test.find('p')
)我们只得到位于
上方的脚本。如果您无法重新排列HTML,我的建议是在正文末尾附加一个脚本,类似于$('.control')。每个(函数(){$(this.find('input').val('something');/*这里有更多代码*/)
否则,我认为您无法通过嵌入到要操作的元素中的脚本来实现这一点,除非它需要与之交互的所有元素都位于DOM的更高位置,因此在脚本执行时都会被解析。我在div中有多个此脚本实例,而且它似乎只是在检索las但是一个都没有。它仍然能够设置最后一个元素thoughterp。你完全正确,我忘了封装它。我将编辑答案。基本上,这个脚本最终作为一个全局变量被覆盖,我的形式很糟糕。