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。你完全正确,我忘了封装它。我将编辑答案。基本上,这个脚本最终作为一个全局变量被覆盖,我的形式很糟糕。