Javascript 显示:无/块排序

Javascript 显示:无/块排序,javascript,html,dom,dhtml,appendchild,Javascript,Html,Dom,Dhtml,Appendchild,我正在学习JavaScript,并尝试从原始结构中重新排序元素。例如,如果我有以下元素: <p id="first">Hello</p> <p id="second">Bye</p> 编辑: 我通过使用document.createElement()解决了这个问题。这是代码,以防有人想要/正在阅读此代码以供将来参考。如果有更有效的方法,请告知我: a b c var zana=[]; 对于(var i=1;i …这再次以正常的文档顺序返回(Hel

我正在学习JavaScript,并尝试从原始结构中重新排序元素。例如,如果我有以下元素:

<p id="first">Hello</p>
<p id="second">Bye</p>
编辑:

我通过使用document.createElement()解决了这个问题。这是代码,以防有人想要/正在阅读此代码以供将来参考。如果有更有效的方法,请告知我:

a

b

c var zana=[]; 对于(var i=1;i …这再次以正常的文档顺序返回(Hello然后Bye,而不是Bye然后Hello)。这是为什么?

正如在注释中提到的,代码只是以相反的顺序设置display属性——实际上并没有颠倒节点的顺序

我能做些什么呢?

实现这一点的一种方法是实际删除带有的节点,然后以相反的顺序附加它们。请参见下面的示例,其中通过将for循环中的迭代器的初始值设置为数组的长度,然后递减而不是递增来实现相反的顺序:

for (var i = zana.length; i > 0; i--) {
同样,我们应该检查以确保给定索引处的元素不是(或也是),但如果是,则跳到下一次迭代(使用),而不是跳出循环:

if (zana[i] == null) continue;
在下面的示例中,用于反转段落标记的功能已移动到事件处理程序中。单击标记为反转顺序的按钮可查看元素的反转顺序。在DOM准备就绪、利用对象并等待事件之前,也不会添加事件处理程序。这可避免访问DOM元素时出错在DOM准备好之前

此外,段落标记也被移动到包含div的位置(即
0;i--){
如果(zana[i]==null)继续;
container.appendChild(zana[i]);
}
});
});

a

b

c


相反的顺序
,因为您只是更改了呈现元素的顺序,而不是位置。更改位置所涉及的不仅仅是更改CSS显示属性。你应该完全移动这些元素。作为旁注:HTML id不允许以数字开头:-)@WartClaes我实际上并没有尝试使用CSS“position”属性,因为我不想将这些元素从正常的文档流中删除,因为这可能会影响我尝试使用的反转操作中未包含的元素。此外,我还没有真正看到任何文件说我不允许订购带有数字的id,而且它没有给我一个错误。或者,我想我可以只使用ASCII字母和数字以外的字符执行id=“_1”(id=“35;”),“-”和“.”可能会导致兼容性问题,因为它们在HTML 4中是不允许的。虽然HTML 5中取消了此限制,但id应该以字母开头以确保兼容性-
for (var i = zana.length; i > 0; i--) {
if (zana[i] == null) continue;