Выберите элемент прямо перед тегом script - программирование
Подтвердить что ты не робот

Выберите элемент прямо перед тегом script

Как бы вы выбрали первый input в коде ниже без редактирования DOM (при необходимости используя jQuery)?

<input type="text"/> <!-- The element I want to select -->
<script>
    // Select the input above
</script>
<input type="text"/>

Обратите внимание, что до и после этого примера кода есть неизвестное количество входов и тегов script, поэтому такие решения, как $("input:eq(1)"), не будут работать.

Трудная часть состоит в том, чтобы выбрать input, помещенный прямо перед тегом script, из которого выполняется текущий JavaScript.

Не нужно спрашивать меня, почему я тоже хочу это сделать, что только для красоты этого, я хочу сделать это, не добавляя случайные идентификаторы к моим входам, если это возможно.

Edit
Вот почему большинство ответов не будут работать: http://jsfiddle.net/2WqfP/

4b9b3361

Ответ 1

Сценарии всегда запускаются по мере их загрузки, поэтому тег <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();

Как только у вас есть script, вы можете легко получить предыдущий ввод:

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

Ответ 2

Здесь jsfiddle, показывающий мое решение.

$("input:last").val("test");

Это работает, потому что, когда достигается script, вход, непосредственно предшествующий ему, является последним входом, который будет создан - следующие <input> еще не добавлены в DOM. Если вы запускали код после загрузки страницы (т.е. В обработчике onload), это не сработало бы.

Стоит отметить, что я лично предпочитаю идентификаторы, чтобы вы не полагались на встроенный JavaScript (обычно это плохая идея).

Ответ 3

Попробуйте следующее:

$("script").prev("input");

Ответ 5

Родное решение DOM:

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

script будет последним элементом на странице, когда он будет работать, поэтому input будет вторым.