18

inputDOM を編集せずに (必要に応じて jQuery を使用して)、以下のコードの最初のコードをどのように選択しますか?

<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 を追加することなくやりたいのです。

編集
ほとんどの回答がうまくいかない理由は次のとおりです: http://jsfiddle.net/2WqfP/

4

6 に答える 6

9

スクリプトは常にロード時に実行されるため、<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();
于 2013-01-21T17:16:32.677 に答える
3

これが私の解決策を示すjsfiddleです。

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

これが機能するのは、スクリプトに到達したときに、その直前の入力が作成される最後の入力であるためです。次<input>のはまだDOMに追加されていません。ページの読み込み後に(つまり、onload偶数ハンドラーで)コードを実行した場合、これは機能しません。

インラインJavaScriptに依存しないように、私は個人的にIDを好むことに注意してください(これは通常は悪い考えです)。

于 2013-01-21T17:15:49.830 に答える
0

インライン スクリプトは解析時に常に実行され、 < script > タグは彼の上にあるものだけを認識します。純粋な JS での最適なソリューション:

<input type="text"/> <!-- The element I want to select -->
<script>
    var inputs = document.querySelectorAll('input');
    var above_input = inputs[inputs.length - 1];
</script>
<input type="text"/>
于 2020-05-18T06:05:04.900 に答える
-1

このようなことを試しましたか?

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

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

于 2013-01-21T17:15:33.123 に答える
-1

これを試して:

$("script").prev("input");
于 2013-01-21T17:14:12.547 に答える
-1

ネイティブ DOM ソリューション:

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

script実行時にページの最後の要素になるため、input最後から 2 番目になります。

于 2013-01-21T17:17:42.953 に答える