an HTML form with a simple JavaScript functionは、選択したオプションに基づいて別のリンクにユーザーを送信することを意味します。要素間に改行を追加するHTMLコードが "parentnode"ベースのjavascript関数を破る
<form>
<select name="deliveryType">
<option value="123">Item 1</option>
<option value="456">Item 2</option>
<option value="789">Item 3</option>
</select>
<p><a href="javascript:void(0);" onClick="javascript:addToCart(this);">Submit</a>
<script>
function addToCart(t) {
var dT = t.parentNode.parentNode.childNodes[1].value;
alert(dT);
// location.href = "http://linkprefix.com/?variable=" + dT;
}</script>
</form>
期待どおりに動作します。変数dT
は、選択したオプションの値を返します。しかし
、<form>
と<select>
、dT
戻りundefined
の間には改行がない場合。しかし、childNodes[1]
をchildNodes[0]
に変更すると、再び動作します。なぜこれが起こるのか分かりません。私は、parentNode
とchildNode
はHTML要素とその中のテキストに基づいており、要素間の改行ではないと考えました。私が推測しなければならない場合、改行はテキストノードとしてカウントされていますが、それは私には意味がありません。それは何が起こっているのですか?これを行うより良い方法はありますか?
空白に関係なく動作します - 'children'にはテキストノードが含まれていません –
_"改行はテキストノードとしてカウントされていますが、それは意味がありません "_ - [white-space:pre;](https://developer.mozilla.org/en/docs/Web/CSS/white-space) - このスタイルを設定すると、 '
'だけでなく、 '\ n'(改行文字)で囲みます。これは、sencseを行い、' childNodes'配列の中にTextノートとして保持する理由の一つになります。 –
@AlonEitanはい、意味があります。私の混乱は、テキストノードが実際にそれらを有効に含むことができる要素にしか存在しないと主張していたことがほとんどでした。私は誤解されていたことを理解しています。 'childNodes'の代わりに' children'を使うことは、私が探しているものです。 – fredsbend