如果不编辑DOM(如果需要,使用jQuery),如何在下面的代码中选择第一个input
?
<input type="text"/> <!-- The element I want to select -->
<script>
// Select the input above
</script>
<input type="text"/>
请注意,此代码示例前后的输入和脚本标记数量未知,因此$("input:eq(1)")
等解决方案无效。
棘手的部分是选择正在执行当前JavaScript的input
标记之前放置的script
。
无需问我为什么我想要这样做,这纯粹是为了它的美丽,我想这样做而不必在我的输入中添加随机ID,如果可能的话。 / p>
修改
这就是为什么大多数答案不起作用的原因:http://jsfiddle.net/2WqfP/
答案 0 :(得分:10)
脚本始终在加载时运行,因此正在运行的<script>
标记将始终是页面上的最后一个标记。使用纯JS,你可以这样得到它:
var scripts = document.getElementsByTagName('script'),
currentScript = scripts[scripts.length - 1];
编辑:之前我弄错了。要获得此时的输入,您需要获得前面的兄弟,因此您将使用previousSibling。另外,请参阅系统下面关于文本节点和潜在解决方案的评论。
var scripts = document.getElementsByTagName('script'),
currentScript = scripts[scripts.length - 1],
input = currentScript.previousSibling;
你也可以使用jQuery:
var currentScript = $('script').last();
获得脚本后,您可以轻松获得上述输入:
var input = $('script').last().prev();
答案 1 :(得分:4)
这是jsfiddle showing my solution。
$("input:last").val("test");
这是有效的,因为当到达脚本时,紧接在它之前的输入是要创建的最后一个输入 - 以下<input>
尚未添加到DOM。如果您在页面加载后运行代码(即,在onload
偶数处理程序中),这将无效。
值得注意的是,我个人更喜欢ID,因此您不依赖于内联JavaScript(这通常是一个坏主意)。
答案 2 :(得分:0)
试试这个:
$("script").prev("input");
答案 3 :(得分:0)
答案 4 :(得分:0)
原生DOM解决方案:
var all = document.getElementsByTagName("*");
var input = all[all.length - 2];
script
将成为页面运行时的最后一个元素,因此input
将倒数第二。
答案 5 :(得分:-1)
内联脚本始终在解析时运行,并且