将节点从第二个移动到第一个
move node from second to first
只想要一个将第二个节点移动到第一个节点的函数。但是不管用,有什么建议吗?
var node = document.getElementById("ir");
var cx = node.childNodes[1];
function der(){
node.insertBefore(cx,node.firstChild);
}
fullcode:
<div id="ir">
<p id="ie">test</p>
<img src="test.gif">
</div>
<script type="text/Javascript">
var node = document.getElementById("ir");
img.setAttribute("onclick","der()");
var cx = node.childNodes[1];
function der(){
node.insertBefore(cx,node.previousSibling);
}
http://jsfiddle.net/joeframbach/JSZPy/
html的问题在于空格。childNodes[0]
匹配第一组空格,childNodes[1]
匹配第一个元素。也许这就是你的问题所在。
<div id="ir">
<p>First</p>
<p>Second</p>
</div>
var node = document.getElementById("ir");
var first = node.childNodes[1];
var second = node.childNodes[3];
node.insertBefore(second,first);
我今天有点慢,但我认为你使用的previousSibling是错误的。我认为它应该与子节点cx相关,而不是父节点。所以应该用cx。previousSibling不是节点。@ previousSibling -我已经编辑了之前的例子,删除了我原来的愚蠢回应…
<div id="ir">
<p id="ie">test</p>
<img src="test.gif">
</div>
<script type="text/Javascript">
var node = document.getElementById("ir");
img.setAttribute("onclick","der()");
var cx = node.childNodes[1];
function der(){
node.insertBefore(cx,cx.previousSibling);
}
两天后编辑!!....当然,我上面给出的例子不会交换P元素和图像,因为图像的真正的previousSibling是/P标签闭包和图像之间的换行字符。更重要的是,从编码的角度来看,它不会工作,因为没有一个名为"img"的对象定义在任何地方…所以我提供了以下选项:
<script>
function swapDivs(obj) {
if(obj.previousSibling){ // if it's null, then it's already the first element //
obj.parentNode.insertBefore(obj, obj.previousSibling);
}
}
</script>
<div id="ir">
<p id="ie">test</p><img src="http://i2.ifrm.com/4639/142/emo/drool.gif" onclick="swapDivs(this);" />
</div>
它没有解决换行问题,我只是重新格式化了HTML。
但是,它确实解决了img问题,并提供了一种将函数添加到任何可单击DOM对象的通用方法,而无需自定义函数。
我将留给您解决如何解决换行/空白兄弟符的问题,但这应该不会太难。如果你想测试你的尝试,这是小提琴…http://jsfiddle.net/radiotrib/ps9XZ/
你已经有了答案,但我建议你这样做:
var node = document.getElementById("ir");
var childs = node.getElementsByTagName("div");
var cx = childs[1];
function der()
{
node.removeChild(cx);
node.insertBefore(cx, childs[0]);
}
der();
我建议您在使用子节点时不要使用空格或断行,因为它们被认为是文本类型的子节点。我希望这段代码能帮助你:Javascript代码:
function change(){
var parent = document.getElementById("ir");
var img = parent.childNodes[1];
parent.removeChild(img);
parent.insertBefore(img, parent.firstChild);
}
HTML代码:<div id="ir"><p id="ie">test</p><img src="test.gif"></div>
<button onclick="change()">Change</button>
相关文章:
- 使用数据上的角度更改设置集合的第一个元素的动画
- 当单击第一个李时,它显示内容一,当单击第二个李时,它显示内容二
- 字母计数:返回重复字母数最多的第一个单词
- 如何使用Javascript在HTML表中查找第一个空行
- 分页:如何用AJAX加载第一个页面
- 全局标志仅与第一个匹配项匹配的Regexp
- 访问ng repeat中的第一个项目
- 使用jQuery只返回选中复选框后的第一个表单元格值
- 使用jQuery插入HTML页面的第一个项目缺少结束标记
- 我的第一个钛移动项目出错
- Javascript:在对象数组中找到匹配项并移动到第一个位置
- HTML,CSS.在移动网站中,在第一个节点之前先显示第二个节点
- 创建我的第一个移动应用程序并将其连接到数据库
- 当前选项卡将移动到页面刷新或表单提交后的第一个选项卡
- 将数组中的所有值向上移动一个索引,并将移位的最后一个元素作为第一个元素
- 移动到另一个Html.编辑:但首先检查第一个字母
- 同位素度假村而不移动第一个元素
- 当我点击提交按钮时,我的javascript第一个警告框显示在移动设备中,但在桌面上运行良好
- 在第一个表单验证javascript之后移动到第二个表单
- 为什么绑定“;move_node.jstree”;移动一组节点时,第一个节点只激发一次