function insertEle(currEle, newEle, parent) {
if (typeof currEle.insertAdjacentElement == "function") {
currEle.insertAdjacentElement("beforeBegin", newEle);
} else {
parent.insertBefore(newEle, currEle);
}
}
if (typeof currEle.insertAdjacentElement == "function") {
currEle.insertAdjacentElement("beforeBegin", newEle);
} else {
parent.insertBefore(newEle, currEle);
}
}
问题就是出在换位置这里,,在 FF下,如果相片和另一个相片换位置,那它就不能再次更换位置了
我要的效果是可以无限次换位置,,但是在IE下正常,在FF下就不正常了
我看了也糊涂,
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head><body><div onmousedown="alert('foo');">foo</div><div onmousedown="alert('bar');">bar</div>
<script>
//var p = document.getElementsByTagName('div')[0].cloneNode(true);
//document.getElementsByTagName('div')[0].parentNode.appendChild(p);
//document.getElementsByTagName('div')[0].parentNode.removeChild(document.getElementsByTagName('div')[0]);swapEle(document.getElementsByTagName('div')[0],document.getElementsByTagName('div')[1]);function swapEle(ele1, ele2) {
var p = ele1.parentNode;
var c1 = ele1.cloneNode(true);
var c2 = ele2.cloneNode(true);
insertEle(ele2, c1, p);
insertEle(ele1, c2, p);
p.removeChild(ele1);
p.removeChild(ele2);
}
function insertEle(currEle, newEle, parent) {
if (typeof currEle.insertAdjacentElement == "function") {
currEle.insertAdjacentElement("beforeBegin", newEle);
} else {
parent.insertBefore(newEle, currEle);
}
}</script>
</body>
</html>交换的代码没有问题,以后不要打错字的说O.o
元素是用DOM创建的<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head><body>
<div id="box"></div>
<script>
d1 = document.createElement("div");
d1.innerHTML = "Hello";
d1.onclick = function(){alert('Hello');}
d1.id = "d1";
d2 = document.createElement("div");
d2.innerHTML = "world";
d2.id = "d2";
d2.onclick = function(){alert('world');}
$("box").appendChild(d1);
$("box").appendChild(d2);
function $(id) {
return document.getElementById(id);
}
function swapEle(ele1, ele2) {
var p = ele1.parentNode;
var c1 = ele1.cloneNode(true);
var c2 = ele2.cloneNode(true);
insertEle(ele2, c1, p);
insertEle(ele1, c2, p);
p.removeChild(ele1);
p.removeChild(ele2);
}
function insertEle(currEle, newEle, parent) {
if (typeof currEle.insertAdjacentElement == "function") {
currEle.insertAdjacentElement("beforeBegin", newEle);
} else {
parent.insertBefore(newEle, currEle);
}
}</script>
<a onclick = "swapEle($('d1'),$('d2'));">exchange</a>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head><body>
<div id="box"></div>
<script>
d1 = document.createElement("div");
d1.innerHTML = "Hello";
addEvent(d1, "click", function(){alert('Hello');});
d1.id = "d1";
d2 = document.createElement("div");
d2.innerHTML = "world";
d2.id = "d2";
addEvent(d2, "click", function(){alert('world');});
$("box").appendChild(d1);
$("box").appendChild(d2);
function $(id) {
return document.getElementById(id);
}
function swapEle(ele1, ele2) {
var p = ele1.parentNode;
var c1 = ele1.cloneNode(true);
var c2 = ele2.cloneNode(true);
insertEle(ele2, c1, p);
insertEle(ele1, c2, p);
p.removeChild(ele1);
p.removeChild(ele2);
}
function insertEle(currEle, newEle, parent) {
if (typeof currEle.insertAdjacentElement == "function") {
currEle.insertAdjacentElement("beforeBegin", newEle);
} else {
parent.insertBefore(newEle, currEle);
}
}function addEvent(obj, event, func, stop) {
if (obj.addEventListener) {
obj.addEventListener(event, func, stop || false);
} else if (obj.attachEvent){
obj.attachEvent("on" + event, func);
}
}
</script>
<a onclick = "swapEle($('d1'),$('d2'));">exchange</a>
</body>
</html>
但是当你复制节点的时候,id值也同样复制了,这个时候id就不是唯一的了,这样一些遵循标准的浏览器就不干了O.o
如果要用你写的交换节点的函数,节点中就不要出现id。这样的话,应该就没有问题了。
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head><body>
<div id="box"></div>
<script>
d1 = document.createElement("div");
d1.innerHTML = "Hello";
addEvent(d1, "click", function(){alert('Hello');});
d1.id = "d1";
d2 = document.createElement("div");
d2.innerHTML = "world";
d2.id = "d2";
addEvent(d2, "click", function(){alert('world');});
$("box").appendChild(d1);
$("box").appendChild(d2);
function $(id) {
return document.getElementById(id);
}
function swapEle(ele1, ele2) {
var p = ele1.parentNode;
var c1 = ele1.cloneNode(true);
var c2 = ele2.cloneNode(true);
insertEle(ele2, c1, p);
insertEle(ele1, c2, p);
p.removeChild(ele1);
p.removeChild(ele2);
}
function insertEle(currEle, newEle, parent) {
if (typeof currEle.insertAdjacentElement == "function") {
currEle.insertAdjacentElement("beforeBegin", newEle);
} else {
parent.insertBefore(newEle, currEle);
}
}function addEvent(obj, event, func, stop) {
if (obj.addEventListener) {
obj.addEventListener(event, func, stop || false);
} else if (obj.attachEvent){
obj.attachEvent("on" + event, func);
}
}
</script>
<a onclick = "swapEle(document.getElementsByTagName('div')[1],document.getElementsByTagName('div')[2]);">exchange</a>
</body>
</html>
~~
不知道你在FF下测试过没有事件一样丢失了。。```在没有点击exchang之前,点击hello会弹出hello,world会弹出world
但是点击exchang之后,节点更换了,,再点击hello或者world都没有触发事件。。
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head><body>
<div id="box"></div>
<script>
d1 = document.createElement("div");
d1.innerHTML = "Hello";//d1.onclick = function(){alert('Hello')};
d2 = document.createElement("div");
d2.innerHTML = "world";//d2.onclick = function(){alert('world')};if(window.ActiveXObject){
addEvent(d1, "click", function(){alert('Hello');});
d1.id = "d1";
d2 = document.createElement("div");
d2.innerHTML = "world";
d2.id = "d2";
addEvent(d2, "click", function(){alert('world');});}
d1.setAttribute("onclick", "alert('Hello');");
d2.setAttribute("onclick", "alert('world');");
$("box").appendChild(d1);
$("box").appendChild(d2);
function $(id) {
return document.getElementById(id);
}
function swapEle(ele1, ele2) {
var p = ele1.parentNode;
var c1 = ele1.cloneNode(true);
var c2 = ele2.cloneNode(true);
insertEle(ele2, c1, p);
insertEle(ele1, c2, p);
p.removeChild(ele1);
p.removeChild(ele2);
}
function insertEle(currEle, newEle, parent) {
if (typeof currEle.insertAdjacentElement == "function") {
currEle.insertAdjacentElement("beforeBegin", newEle);
} else {
parent.insertBefore(newEle, currEle);
}
}function addEvent(obj, event, func, stop) {
if (obj.addEventListener) {
obj.addEventListener(event, func, stop || false);
} else if (obj.attachEvent){
obj.attachEvent("on" + event, func);
}
}
</script>
<a onclick = "swapEle(document.getElementsByTagName('div')[1],document.getElementsByTagName('div')[2]);">exchange</a>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head><body>
<div id="box"></div>
<script>
d1 = document.createElement("div");
d1.innerHTML = "Hello";//d1.onclick = function(){alert('Hello')};
d2 = document.createElement("div");
d2.innerHTML = "world";//d2.onclick = function(){alert('world')};if(window.ActiveXObject){
addEvent(d1, "click", function(){alert('Hello');});
addEvent(d2, "click", function(){alert('world');});}
d1.setAttribute("onclick", "alert('Hello');");
d2.setAttribute("onclick", "alert('world');");
$("box").appendChild(d1);
$("box").appendChild(d2);
function $(id) {
return document.getElementById(id);
}
function swapEle(ele1, ele2) {
var p = ele1.parentNode;
var c1 = ele1.cloneNode(true);
var c2 = ele2.cloneNode(true);
insertEle(ele2, c1, p);
insertEle(ele1, c2, p);
p.removeChild(ele1);
p.removeChild(ele2);
}
function insertEle(currEle, newEle, parent) {
if (typeof currEle.insertAdjacentElement == "function") {
currEle.insertAdjacentElement("beforeBegin", newEle);
} else {
parent.insertBefore(newEle, currEle);
}
}function addEvent(obj, event, func, stop) {
if (obj.addEventListener) {
obj.addEventListener(event, func, stop || false);
} else if (obj.attachEvent){
obj.attachEvent("on" + event, func);
}
}
</script>
<a onclick = "swapEle(document.getElementsByTagName('div')[1],document.getElementsByTagName('div')[2]);">exchange</a>
</body>
</html>ie ff 有区别,分类讨论
在IE里‘onclick’是一个Event,不能用添加Attribute 的方法 setAttribute 来设定,需要选择DOM的添加Event 的方法如div.attachEvent('onclick',test); 而不能div.setAttribute('onclick','test')
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head><body>
<div id="box"></div>
<script>
d1 = document.createElement("div");
d1.innerHTML = "Hello";
addEvent(d1, "click", function(){alert('Hello');});
d1.id = "d1";
d2 = document.createElement("div");
d2.innerHTML = "world";
d2.id = "d2";
addEvent(d2, "click", function(){alert('world');});
$("box").appendChild(d1);
$("box").appendChild(d2);
function $(id) {
return document.getElementById(id);
}
function swapEle(ele1, ele2) {
var p = ele1.parentNode;
var c1 = ele1.cloneNode(true);
var c2 = ele2.cloneNode(true);
insertEle(ele2, c1, p);
insertEle(ele1, c2, p);
p.removeChild(ele1);
p.removeChild(ele2);
}
function insertEle(currEle, newEle, parent) {
if (typeof currEle.insertAdjacentElement == "function") {
currEle.insertAdjacentElement("beforeBegin", newEle);
} else {
parent.insertBefore(newEle, currEle);
}
}function addEvent(obj, event, func, stop) {
if (obj.addEventListener) {
obj.addEventListener(event, func, stop || false);
} else if (obj.attachEvent){
obj.attachEvent("on" + event, func);
}
}
</script>
<a onclick = "swapEle($('d1'),$('d2'));">exchange</a>
</body>
</html>
在ff和ie下通过<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head><body>
<div id="box"></div>
<script>
d1 = document.createElement("div");
d1.innerHTML = "Hello";//d1.onclick = function(){alert('Hello')};
d2 = document.createElement("div");
d2.innerHTML = "world";//d2.onclick = function(){alert('world')};if(window.ActiveXObject){
addEvent(d1, "click", function(){alert('Hello');});
addEvent(d2, "click", function(){alert('world');});}
d1.setAttribute("onclick", "alert('Hello');");
d2.setAttribute("onclick", "alert('world');");
$("box").appendChild(d1);
$("box").appendChild(d2);
function $(id) {
return document.getElementById(id);
}
function swapEle(ele1, ele2) {
var p = ele1.parentNode;
var c1 = ele1.cloneNode(true);
var c2 = ele2.cloneNode(true);
insertEle(ele2, c1, p);
insertEle(ele1, c2, p);
p.removeChild(ele1);
p.removeChild(ele2);
}
function insertEle(currEle, newEle, parent) {
if (typeof currEle.insertAdjacentElement == "function") {
currEle.insertAdjacentElement("beforeBegin", newEle);
} else {
parent.insertBefore(newEle, currEle);
}
}function addEvent(obj, event, func, stop) {
if (obj.addEventListener) {
obj.addEventListener(event, func, stop || false);
} else if (obj.attachEvent){
obj.attachEvent("on" + event, func);
}
}
</script>
<a onclick = "swapEle(document.getElementsByTagName('div')[1],document.getElementsByTagName('div')[2]);">exchange</a>
</body>
</html>
因为用setAttribute的话,只能用字符串代替