0

谁能给我 javascipt 代码以sf_number从我的 HTML 中提取以下实例?

<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另一个字段的不同值替换所有三个实例。这是我为尝试提取 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”类的元素。如果要选择 text sf_number,最好将其放在 span 或类似元素中,以便更直接地引用它。依赖不同的浏览器一致地插入文本节点并不是一个好主意。

于 2012-11-14T01:46:13.043 回答