0

私のHTMLから次のインスタンスを抽出するためのjavasciptコードを誰かに教えてもらえsf_numberますか?

<ul class="multi_value_field" style="width: 99.5%;">
<li class="choice" choice_id="sf_number">sf_number<a class="close">×</a><input type="hidden" name="ticket[set_tags][]" value="sf_number" style="display: none;"></li>
<li class="search_field_item"><input type="text" autocomplete="off" tabindex="20"></li>
</ul>

sf_number基本的に、の 3 つのインスタンスすべてを別のフィールドの異なる値に置き換えたいと考えています。これは、sf_number を試して抽出するために作成したコードですが、今のところ機能しません。

var n2 = document.getElementsByClassName("multi_value_field").getElementsByClassName("choice");

前もって感謝します

更新 以下の提案を使用して既存のコードを変更するにはどうすればよいですか?

<html>
<script type="text/javascript">
copy = function()
{
    var n1 = document.getElementById("ticket_fields_20323656");
    var n2 = document.getElementById("choice").getElementsByClassName("sf_number")[0] ;
    n2.value = n1.value;
}
</script>

<input type="button" value="copy" onClick="copy();" />
</html>​​​​​

アップデート

これはうまくいかないようですが、正しいですか?

<html>
<script type="text/javascript">
copy = function()
{
var fields = document.getElementsByClassName("multi_value_field")[0].getElementsByClassName("choice");

for (var i = 0; i < fields.length; i++)

    fields[i].setAttribute("choice_id", "document.getElementById("ticket_fields_20323656").value");
    fields[i].getElementsByTagName("input")[0].value = "document.getElementById("ticket_fields_20323656").value";
    fields[i].firstChild.nodeValue = "document.getElementById("ticket_fields_20323656").value";
}
</script>

<input type="button" value="copy" onClick="copy();" />
</html>​​​​​
4

3 に答える 3

1

var n2 = document.getElementsByClassName("multi_value_field") ノードリストを返します

したがって、リストを反復するには for ループを使用する必要があります。

var n2 = document.getElementsByClassName("multi_value_field");

for(var i =0;i< n2.length;i++){
  var $li =  n2[i].getElementsByClassName("choice"); This is again a Node list.

  for(var j = 0;j< $li.length ; j++){
     $li[j] // This the li in question
  }
}

アップデート

var n1 = document.getElementById("ticket_fields_20323656"); 
var n2 = document.getElementById("choice").getElementsByClassName("sf_number");
// The above line again return's node List .... 
n2.value = n1.value;

単一のクラスがあると思われる場合は、この行をこれに置き換えます

var n2 = document.getElementById("choice").getElementsByClassName("sf_number")[0] ;

id="choice"しかし、問題は、要素が表示されないことですHTML.

于 2012-11-14T00:59:33.440 に答える
1

このコードを試してください。テキストも置き換えますか?

<script>
var fields = document.getElementsByClassName("multi_value_field")[0].getElementsByClassName("choice");

for (var i = 0; i < fields.length; i++)
{
    fields[i].setAttribute("choice_id", "something else");
    fields[i].getElementsByTagName("input")[0].value = "something else";
    fields[i].firstChild.nodeValue = "something else";
}
</script>
于 2012-11-14T01:07:35.963 に答える
0

あなたの質問を理解しているかどうかわかりません。

「choice_id」という名前の HTML 属性はありません。非標準の属性を使用することはお勧めできません。値「sf_number」を使用して要素の数を識別したい場合は、代わりにクラスを使用する必要があります。

<li class="choice sf_number">sf_number<a class="close">×</a>...</li>

getElementsByClassName、 またはを使用して、「sf_number」のクラスを持つすべての要素を取得できるようになりquerySelectorAllました。これらのいずれかまたは両方にシムを追加して、作業を楽にしてから、次を使用できます。

var sfNumbers = document.querySelectorAll('.sf_number');

次に、他の回答ごとにコレクションを反復処理できます。

要素は複数のクラスを持つことができます。上記は「sf_number」のクラスを持つものだけを選択します。テキストを選択したい場合はsf_number、それをスパンまたは同様の要素に配置して、より直接参照できるようにする方がはるかに優れています。テキストノードを一貫して挿入するために異なるブラウザーに依存することは、良い考えではありません。

于 2012-11-14T01:46:13.043 に答える