2014-12-02 93 views
-1

我已经在每个页面上有3个现有的盒子(div),每个盒子都有唯一的ID(1,2,3)。我想每个人都有一个按钮,允许用户在下面添加新的框。这些框应该遵循现有的编号。但是,这样做也意味着更新新版本下已存在的框的ID,以便数字匹配。javascript为渐进ID添加新元素并更新现有的元素

这是我的代码:

function add_box(n) { 
    document.getElementById("box"+(n<)).setAttribute("id", "box"); 
    var div = document.createElement("div"); 
    div.id="box"+(n+1); 
    var txt = document.createTextNode("A new box"); 
    div.appendChild(txt); 

    var newbox = document.getElementById("box"+n); 
    insertAfter(div,newbox); 
    } 

HTML

<div id="box1">Whatever</div><input type="button" onclick="add_box(1)"> 
<div id="box2">Whatever</div><input type="button" onclick="add_box(2)"> 
<div id="box3">Whatever</div><input type="button" onclick="add_box(3)"> 

它显然不工作,因为我想我需要与所有包含“盒子”的ID元素的数组和然后以某种方式更新他们的数字,但我不知道如何做到这一点。

谢谢。

+0

请勿张贴产生控制台错误代码。检查你的控制台。然后修复你的语法。如果你仍然难倒,**然后**你可以发布。如果有任何机会,你不知道如何查看控制台,那么在你做任何事情之前马上解决它。顺便说一句,你为什么重置现有元素的ID? – 2014-12-02 06:17:04

+0

“盒子”+(n <)'评估的是什么? * insertAfter *函数在哪里定义? – RobG 2014-12-02 06:21:15

+0

@ torazaburo - 因为它在现有的div之间插入新的div(或者应该是)。 – RobG 2014-12-02 06:23:37

回答

0

以下是你所要求的,但我怀疑它不是你想要的结果。

<script> 

// Append a new div after one with id boxn 
function add_box(n) { 
    var el = document.getElementById('box' + n); 
    var div = document.createElement('div'); 

    div.id = 'box' + ++n; 
    div.appendChild(document.createTextNode('New box ' + n)); 
    el.parentNode.insertBefore(div, el.nextSibling); 
    renumberDivs(div, n); 
} 

// Renumber all sibling divs after el 
function renumberDivs(el, n) { 

    // Note assignment, not equality 
    while (el = el.nextSibling) { 
    if (el.tagName && el.tagName.toLowerCase() == 'div'){ 
     el.id = 'box' + ++n; 
    } 
    } 
} 
</script> 

<div id="box1">Whatever</div><input type="button" value="add below 1" onclick="add_box(1)"> 
<div id="box2">Whatever</div><input type="button" value="add below 2" onclick="add_box(2)"> 
<div id="box3">Whatever</div><input type="button" value="add below 3" onclick="add_box(3)"> 

请注意,在上述中,数字作为参数传递,它们被视为数字,但在用于ID值时也会隐式转换为字符串。这种类型转换并不是很喜欢,可以考虑使用更明确的方法。

点击几下后,你可能会喜欢的东西:

<div id="box1">Whatever</div> 
<div id="box2">New box 2</div> 
<div id="box3">New box 3</div> 
<div id="box4">New box 4</div> 
<div id="box5">New box 4</div> 
<div id="box6">New box 4</div> 
<div id="box7">New box 2</div><input type="button" value="add a box" onclick="add_box(1)"> 
<div id="box8">Whatever</div><input type="button" value="add a box" onclick="add_box(2)"> 
<div id="box9">Whatever</div><input type="button" value="add a box" onclick="add_box(3)"> 
+0

到目前为止它的工作。让我进一步测试一下,然后让你知道。谢谢。 – 2014-12-02 06:47:54

+0

好的,我现在发现的问题是,正如你所说的,现在其他盒子的按钮因为它们改变了ID而被解除关联,但我认为这可以通过在onclick =“add_box(this.id)中使用变量轻松解决。你怎么看? – 2014-12-02 06:51:15