簡體   English   中英

替換JavaScript innerHTML中的子字符串

[英]Replacing a sub-string in JavaScript innerHTML

我有一個HTML頁面,其中包含表格行

    <tr id="tp1">
    <input type="checkbox" id="tc_">
     </tr> 
    <tr id="tp2">
    <input type="checkbox" id="tc_">
    </tr>

該頁面包含復選框以外的輸入元素,我還必須將所有復選框的ID的值從tc_更改為tc_1,tc_2等。 我已經考慮過如下

function startup(){
    for(var i=0;i<3;i++)
    {
        var elem=document.getElementById("tp"+i);
        var str=elem.innerHTML;
        str.replace(/tc_,'tc_'+i);  // how do I correctly use the arguments here?
        elem.innerHTML=str;
        //alert (""+str);
     }
 }

謝謝。

首先使用非唯一ID是無效的。 您是否有機會修復復選框的呈現方式,而不必這樣做?

話雖如此,我不會通過操縱HTML屬性來做到這一點。 我可以通過操縱這些輸入復選框的DOM屬性來做到這一點:

// keep track of the current "new" checkbox ID suffix
var checkBoxIndex = 0;
for (var i = 0; i < 3; i++) {
    // find the table row
    var elem = document.getElementById("tp" + i);
    // get the input elements within that row
    var inputs = elem.getElementsByTagName("input");
    // for each of the input elements...
    for (var j = 0, k = inputs.length; j < k; j++) {
        // if it's not a checkbox, skip it
        if (inputs[j].type.toLowerCase() !== 'checkbox') {
            continue;
        }
        // Alas, give the checkbox a new, unique ID
        inputs[j].id = "tc_" + (checkBoxIndex++);
    }
}

另外,希望您能回答其他問題 這是一個糟糕的解決方法,我不希望在生產代碼中看到它。

這里的技巧是使用適當的CSS選擇器選擇行的所有輸入元素,然后修改其ID:

function startup() {
  for (var i = 0; i < 3;i++) {
     var elem = document.getElementById("tp" + i);

     var l = elem.querySelectorAll('td > input'); // Select "input"s in "td"s
     Array.prototype.forEach.call(l, function (e, j) { // Apply to each element obtained
       e.id = 'tc_' + j; // Modify the id
     });
  }
}

上面有幾個不錯的答案,但是如果您仍然想將ID從tc_更改為tc_ + i,則可以這樣做。

<body>
<button id="tc_">1</button>
<button id="tc_">2</button>
<button id="tc_">3</button>

<script type="text/javascript">
for(var i=0;i<3;i++)
{
document.getElementById("tc_").id="tc_"+i;
}
</script>

</body>

坦白地說,盡管此代碼可以正常工作,但您不應該這樣做,因為其他用戶已經說過,擁有非唯一ID是無效的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM