2013-01-21 6 views
14

DOMを編集せずに、以下のコードで最初にinputを選択します(必要に応じてjQueryを使用します)。スクリプトタグの直前にある要素を選択してください

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

入力し、スクリプトタグの未知の数は、このように$("input:eq(1)")のようなソリューションが動作しません、このサンプルコードの前と後がありますのでご注意ください。

現在のJavaScriptが実行されているscriptタグの直前にあるinputを選択するのが難しい部分です。

私はこれもやってみたいと思っています。それは純粋にその美しさです。もし可能であれば、ランダムなIDを入力せずにやりたいと思っています。

編集
回答のほとんどは動作しません理由はここにあります:http://jsfiddle.net/2WqfP/

答えて

0

はこれを試してみてください:

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

ここjsfiddle showing my solutionです。

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

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

インラインJavaScriptに頼らないように、私は個人的にIDを好むことに気づく価値はあります(通常は悪い考えです)。

+0

良い点 –

+0

ほとんどの場合はうまくいくが、残念ながらコードスニペットはライトボックスにロードされることがあり、DOMの先頭に挿入されることがあります。しかし、ありがとう! – user1728278

+0

あなたの最後のフレーズについて、私は個人的にIDとインラインJavaScriptの両方を避けますが、ドリル、レガシーコード、すべてを知っています... – user1728278

7

スクリプトは常に読み込まれるときに実行されるため、実行中の<script>タグは常にページの最後のタグになります。

var scripts = document.getElementsByTagName('script'), 
    currentScript = scripts[scripts.length - 1]; 

編集:私はこの前に間違って得た純粋なJSを使用すると、このようにそれを得ることができます。この時点で入力を取得するには、前の兄弟を取得したいので、previousSiblingを使用します。また、テキストノードと潜在的な解決策に関するシステムのコメントを参照してください。

var currentScript = $('script').last(); 

スクリプトを持っていたら、あなたは簡単に前の入力を取得することができます:

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

今日私は学んだ。 +1 – BoltClock

+0

実際にロードされている間に実行されますが、DOMの先頭に追加されると(たとえば、そのようなライトボックスで)、実行されているものがDOMの最後の1つ。 – user1728278

+2

@ user1728278:追加されるスクリプトは、質問とは非常に異なる状況です。しかし、それが付加されていれば、appenderを実行するコードは 'input'がどこにあるかを既に知っていなければなりません(' script'は 'input'に相対的に配置されるので)。 –

0

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

var all = document.getElementsByTagName("*"); 
var input = all[all.length - 2]; 
をあなたはまた、jQueryのを使用することができ

var scripts = document.getElementsByTagName('script'), 
    currentScript = scripts[scripts.length - 1], 
    input = currentScript.previousSibling; 

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

関連する問題