标题不知道如何描述准确。。要求效果是这样的:在一个html中,有这样的代码:<div id="div01">
<input type="button" onclick="" value="新增"> <input type="button" value="删除">
</div><div id="div02">
<input type="button" onclick="" value="新增"> <input type="button" value="删除">
</div><div id="div03">
<input type="button" onclick="" value="新增"> <input type="button" value="删除">
</div>……<div id="div0N">
<input type="button" onclick="" value="新增"> <input type="button" value="删除">
</div>
当点击新增按钮后,会新增新的一行:div的ID发生变化产生新的id,如div02 ,div03……一直循环要求是新出来的div,要在当前的id后插入,而不是所有div的最后面如:选择在第一个div即id=div01的层里面的按钮,点击了新增,将会在当前div01的后面新插入一个div02,而不是在最后一个div0N的后面插入新的div
上面的这些我用了一些很复杂的代码能“勉强”实现,但是问题就是,当点击新增后,如何将已存在的ID变化呢?
也就是这样:<div id="div01">
<input type="button" onclick="" value="新增"> <input type="button" value="删除"> ------点击本div内的新增按钮
</div><div id="div02">---这里是上面点击后产生的新的div
<input type="button" onclick="" value="新增"> <input type="button" value="删除">
</div>
<div id="div02">---这里开始,包括后面所有的div,应该自动+1,如此处应该是div03
<input type="button" onclick="" value="新增"> <input type="button" value="删除">
</div>……<div id="div0N">
<input type="button" onclick="" value="新增"> <input type="button" value="删除">
</div>我选择div01里面的新增按钮,点击了新增后,会插入一个新的div02,应该将原有的div02,包括后面的层的id,都自动更名,改为div03,div04…… 这个如何做到呢?
<input type="button" onclick="" value="新增"> <input type="button" value="删除">
</div><div id="div02">
<input type="button" onclick="" value="新增"> <input type="button" value="删除">
</div><div id="div03">
<input type="button" onclick="" value="新增"> <input type="button" value="删除">
</div>……<div id="div0N">
<input type="button" onclick="" value="新增"> <input type="button" value="删除">
</div>
当点击新增按钮后,会新增新的一行:div的ID发生变化产生新的id,如div02 ,div03……一直循环要求是新出来的div,要在当前的id后插入,而不是所有div的最后面如:选择在第一个div即id=div01的层里面的按钮,点击了新增,将会在当前div01的后面新插入一个div02,而不是在最后一个div0N的后面插入新的div
上面的这些我用了一些很复杂的代码能“勉强”实现,但是问题就是,当点击新增后,如何将已存在的ID变化呢?
也就是这样:<div id="div01">
<input type="button" onclick="" value="新增"> <input type="button" value="删除"> ------点击本div内的新增按钮
</div><div id="div02">---这里是上面点击后产生的新的div
<input type="button" onclick="" value="新增"> <input type="button" value="删除">
</div>
<div id="div02">---这里开始,包括后面所有的div,应该自动+1,如此处应该是div03
<input type="button" onclick="" value="新增"> <input type="button" value="删除">
</div>……<div id="div0N">
<input type="button" onclick="" value="新增"> <input type="button" value="删除">
</div>我选择div01里面的新增按钮,点击了新增后,会插入一个新的div02,应该将原有的div02,包括后面的层的id,都自动更名,改为div03,div04…… 这个如何做到呢?
先增加新的DIV
再用document.getElementsByName("name")来获取。。然后
for循环,给他们重新命名。。
$(".add").live("onclick",function(){
var parent = $(this).parent("div");
var id = parseInt(parent.attr("id").match("\d+$"));
var temp = id+1;
parent.nextAll("div").each(function(){
$(this).attr("id","div"+ (temp + 1).toString());
temp++;
});
//新增你要的div吧
});
});
//保存跑一下,看看效果对不。
<script language="javascript">
var i=1;
function set(th)
{
i=i+1;
var click_div=th.parentNode //获取点击的div
var clone_div=click_div.cloneNode(true);//克隆里面的内容
click_id=click_div.id //获取id
clone_idnum=parseInt(click_id.replace("div",""))+1;
clone_div.innerHTML+="-->第"+i+"点击结果"; //增加显示效果
clone_div.id="div"+(clone_idnum)
clone_div.children[1].value="div"+(clone_idnum);//把div 的id显示到input var alldiv_parent = click_div.parentNode; //获取所有对象父级
if(alldiv_parent.lastChild == click_div) //是否点的是最后一个div里的button
{
alldiv_parent.appendChild(clone_div); }
else
{
alldiv_parent.insertBefore(clone_div,click_div.nextSibling,click_div); //如果不是,则把新元素插入到目标元素和parent元素的下一个子元素的中间
//目标元素后面的下一个兄弟节点是目标元素的nextSibling属性
//重置所有div的id
allnodes=alldiv_parent.childNodes
for(j=0;j<allnodes.length;j++)
{
allnodes[j].id="div"+(j+1);
allnodes[j].children[1].value="div"+(j+1);//把div 的id显示到input
}
} }
</script>
<div id="div1"><input type="button" value="插入" onclick="set(this)"><input type="text" size=10 value="div1"></div>
时间戳: Wed, 17 Nov 2010 04:21:12 UTC
消息: 'allnodes[...].children.1' 为空或不是对象
行: 39
字符: 13
代码: 0
URI: http://localhost/2.htm
消息: 'allnodes[...].children.1' 为空或不是对象
行: 39
字符: 13
代码: 0
URI: http://localhost/2.htm
时间戳: Wed, 17 Nov 2010 05:48:03 UTC
消息: 'allnodes[...].childNodes.1' 为空或不是对象
行: 39
字符: 13
代码: 0
URI: http://localhost/2.htm如果是已经产生的新div,再去点击这个新增出来的div,在它基础上再接着新增,就会提示错误
<div id="box"> <div id="div1">
<input type="button" onclick="" value="新增" />
<input type="button" value="删除" />
</div> <div id="div2">
<input type="button" onclick="" value="新增" />
<input type="button" value="删除" />
</div> <div id="div3">
<input type="button" onclick="" value="新增" />
<input type="button" value="删除" />
</div></div><script type="text/javascript">document.getElementById("box").onclick = function(e){
var e = e || window.event,
target = e.target || e.srcElement;
if(target.value === "新增"){
var nextSibling = target.parentNode.nextSibling;
while(nextSibling){
if(nextSibling.nodeType == 1)
nextSibling.id = nextSibling.id.replace(/(\d+)/, function(word){ return parseInt(word) + 1; });
nextSibling = nextSibling.nextSibling;
}
var division = document.createElement("div");
division.id = target.parentNode.id.replace(/(\d+)/, function(word){ return parseInt(word) + 1; });
division.innerHTML = '<input type="button" onclick="" value="新增" /> <input type="button" value="删除" />';
this[ target.parentNode.nextSibling ? "insertBefore" : "appendChild" ](division, target.parentNode.nextSibling)
}
}</script>
每个DIV等于一个对象,将这些对象装到一个数组里,利用数组在页面中创建HTML元素
插入和删除操作时,修改数组内容,移除之前的HTML元素,根据新数组重新创建
我现在是用数组的。但是这样一来,会不会把对象中,如input的值给刷没了?
我加了一个删除的方法<script type="text/javascript">document.getElementById("box").onclick = function(e){
var e = e || window.event,
target = e.target || e.srcElement;
if(target.value === "新增"){
var nextSibling = target.parentNode.nextSibling;
while(nextSibling){
if(nextSibling.nodeType == 1)
nextSibling.id = nextSibling.id.replace(/(\d+)/, function(word){ return parseInt(word) + 1; });
nextSibling = nextSibling.nextSibling;
}
var division = document.createElement("div");
division.id = target.parentNode.id.replace(/(\d+)/, function(word){ return parseInt(word) + 1; });
division.innerHTML = '<input type="button" onclick="" value="新增" /> <input type="button" onclick="" value="删除" />';
this[ target.parentNode.nextSibling ? "insertBefore" : "appendChild" ](division, target.parentNode.nextSibling)
}
if(target.value === "删除"){
var nextSibling = target.parentNode.nextSibling;
while(nextSibling){
if(nextSibling.nodeType == 1)
nextSibling.id = nextSibling.id.replace(/(\d+)/, function(word){ return parseInt(word) - 1; });
nextSibling = nextSibling.nextSibling;
}
var box = target.parentNode.parentNode;
box.removeChild(target.parentNode);
}
}