选择脚本标记之前的元素

时间:2013-01-21 17:12:21

标签: javascript jquery jquery-selectors

如果不编辑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/

6 个答案:

答案 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)

你尝试过这样的事吗?

var input = $('script').prev();

http://api.jquery.com/prev/

答案 4 :(得分:0)

原生DOM解决方案:

var all = document.getElementsByTagName("*");
var input = all[all.length - 2];

script将成为页面运行时的最后一个元素,因此input将倒数第二。

答案 5 :(得分:-1)

内联脚本始终在解析时运行,并且