比方說,我在頁面上有三個<div>
元素。我如何交換第一個和第三個<div>
的頭寸? jQuery很好。DOM中的JavaScript移動元素
回答
瑣碎jQuery
$('#div1').insertAfter('#div3');
$('#div3').insertBefore('#div2');
如果您希望重複這樣做,你就需要使用不同的選擇,因爲申報單將保留它們的ID,因爲它們四處移動。
$(function() {
setInterval(function() {
$('div:first').insertAfter($('div').eq(2));
$('div').eq(1).insertBefore('div:first');
}, 3000);
});
jQuery.fn.swap = function(b){
b = jQuery(b)[0];
var a = this[0];
var t = a.parentNode.insertBefore(document.createTextNode(''), a);
b.parentNode.insertBefore(a, b);
t.parentNode.insertBefore(b, t);
t.parentNode.removeChild(t);
return this;
};
,並使用它像這樣:
$('#div1').swap('#div2');
,如果你不想使用jQuery,你可以很容易地適應功能。
沒有必要使用圖書館這樣一個簡單的任務:
var divs = document.getElementsByTagName("div"); // order: first, second, third
divs[2].parentNode.insertBefore(divs[2], divs[0]); // order: third, first, second
divs[2].parentNode.insertBefore(divs[2], divs[1]); // order: third, second, third
這考慮的事實:getElementsByTagName
返回現場節點列表會自動更新以反映DOM元素的順序當他們被操縱時。
您還可以使用:
var divs = document.getElementsByTagName("div"); // order: first, second, third
divs[0].parentNode.appendChild(divs[0]); // order: second, third, first
divs[1].parentNode.insertBefore(divs[0], divs[1]); // order: third, second, third
還有其他各種可能的排列,如果你喜歡嘗試:
divs[0].parentNode.appendChild(divs[0].parentNode.replaceChild(divs[2], divs[0]));
例如:-)
確實如此,但很難與jQuery提供的優雅性和可讀性爭辯 - 更不用說增強功能了。 – 2009-09-01 17:56:50
也就是說,對於裸編碼方法+1。 – 2009-09-01 17:58:08
是的,但誰只做這件事? – tvanfosson 2009-09-01 18:29:31
jQuery的方法提到的頂部將工作。 你也可以使用JQuery和CSS。例如對於你已經應用了class1和div2的div,你已經應用了class class2(比如說每個css類都提供了瀏覽器上的特定位置),現在你可以使用jquery或JavaScript(這將改變位置)
var swap = function() {
var divs = document.getElementsByTagName('div');
var div1 = divs[0];
var div2 = divs[1];
var div3 = divs[2];
div3.parentNode.insertBefore(div1, div3);
div1.parentNode.insertBefore(div3, div2);
};
這個功能看起來很奇怪,但它才能正常工作很大程度上依賴於標準的。實際上,它看起來好於the jQuery version that tvanfosson posted,它似乎只做了兩次交換。
它依賴於什麼標準特性?
insertBefore 在現有子節點refChild之前插入節點newChild。如果 refChild爲空,則在 兒童列表的末尾插入newChild。 如果newChild是一個DocumentFragment對象,則它的所有子項都按 refChild之前的順序插入 。 如果樹中的newChild已經是 ,則首先將其刪除。
對不起,撞到這個線程 我絆了「交換DOM元素」的問題,有點繞
結果發揮是一個jQuery天然的「解決方案」,這似乎是真的很漂亮(不幸的是我不知道什麼在jQuery的內部發生這樣做時)
驗證碼:
$('#element1').insertAfter($('#element2'));
jQuery的文件說ŧ帽子insertAfter()
移動的元素,並且不克隆它
。之前和。經過
運用現代香草JS!更好的方式/清潔劑比以前
const div1 = document.getElementById("div1");
const div2 = document.getElementById("div2");
const div3 = document.getElementById("div3");
div2.after(div1);
div2.before(div3);
Browser Support - 84%的全球,87%的美國作爲'18三月
尚無Internet Explorer支持。 – Norris 2017-12-09 13:41:58
您不必編寫較少的可維護代碼來支持舊版或不符合標準的瀏覽器上的用戶。除非您在企業工作,否則很少有用戶會錯過 – Gibolt 2017-12-09 18:13:45
其他方法在維護性方面也同樣適用,尤其是在包裝完美的清潔功能時。我全都是爲了編寫現代代碼,但這是前衛。很高興知道未來會發生什麼,但儘管我不喜歡與IE相關的任何事情,但瞭解您的決定的影響非常重要。在這種情況下 - 任何IE瀏覽器中的破碎的Web應用程序。如果這對你很好 - 太棒了!我添加了評論只是爲了通知任何人使用谷歌搜索:) – Norris 2017-12-11 09:44:20
- 1. 移動第一DOM最後的DOM元素後的JavaScript
- 2. 用append()移動DOM元素?
- 3. 如何移動DOM中的元素?
- 4. JavaScript DOM元素
- 5. 移動DOM元素位置動態
- 6. 使所有的DOM元素移動
- 7. 移動DOM元素的方法
- 8. Ember.js組件移動DOM元素
- 9. 在DOM元素後移動選區
- 10. 使用jQuery移動DOM元素
- 11. 移動DOM HTML元素左右
- 12. 當聽一個DOM元素移動爲
- 13. jQuery移動父元素內的DOM元素
- 14. javascript不移動元素
- 15. 使用javascript移動元素
- 16. 使用javascript移動元素
- 17. jQuery的 - 用JavaScript移動元素中
- 18. Javascript:陣列中的移動元素
- 19. JavaScript的替代DOM元素
- 20. 從帶有滑動動畫的DOM中移除元素
- 21. 動畫DOM元素
- 22. 在HTML5中使用JavaScript移動元素
- 23. 的DOM元素移動的動畫,因爲增加一個元素
- 24. 包裝JavaScript對象中的DOM元素
- 25. 將元素從一個DOM移動到另一個DOM
- 26. 用javascript覆蓋DOM元素
- 27. Javascript DOM元素無效CSS
- 28. Javascript:「Dangling」引用DOM元素?
- 29. JavaScript DOM刪除元素
- 30. JavaScript轉換DOM元素
的有一個錯誤的地方。它似乎只工作兩次。 http://jsbin.com/evedu – 2009-09-01 17:59:55
我只希望它能夠工作一次。 – tvanfosson 2009-09-01 18:12:19
@Ionut - 重點在於它取決於元素的相對位置。一旦你改變了訂單,你不能再通過他們的ID找到第一個和第三個,並需要另外的方法。我的回答只是爲了說明完成所需任務的方法的功能,不是一個全面的解決方案,可以隨意多次更換集合中的第一個和第三個div。 – tvanfosson 2009-09-01 18:15:36