javascript - 检测 DOM 元素顺序的变化

标签 javascript jquery dom

我有以下代码:

<div>
  <span>Random text</span> 
  <span style="color: red">Random text</span>
</div>

并且,使用代码,我有 50% 的机会更改 div 中元素的顺序。

$(document).ready(function() {
  var initial = $("div"); //This might not be ok

  if (new Date() % 2) //50% chance to randomize order 
    randomizeOrder();

  var after = $("div"); //Also this might not be ok
  //Detect if the order of spans changed
  if (after != initial) //Definitely won't work
    console.log("Order changed");
})

function randomizeOrder() {
  var lastElement = $("div span").last();
  $(lastElement).insertBefore($("div span").first());
}

这个例子过于简单化了。订购是由用户使用第三方库完成的,它不会告诉我订单是否真的改变了,只告诉我它何时开始和结束。

如何检测 DOM 元素的顺序是否真的改变了?我在其中的信息无法使用,因为它可能与示例中的信息完全相同。

Fiddle

最佳答案

如果你想检查 DOM 中的变化,你可以使用 MutationObserver:

$(document).ready(function() {
  var initial = $("div"); //This might not be ok

  if (new Date() % 2) {
    randomizeOrder();
  }
  
});

function randomizeOrder() {
  var lastElement = $("div span").last();
  $(lastElement).insertBefore($("div span").first());
}

var target = document.getElementById('id1');

// create an observer instance
var observer = new MutationObserver(function(mutations) {
  var changed = false;
  mutations.forEach(function(mutation) {
    // You can check the actual changes here
  });
  console.log('Dom Changed');
});

// configuration of the observer:
var config = { attributes: true, childList: true, characterData: true };

// pass in the target node, as well as the observer options
observer.observe(target, config);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="id1">
  <span>Random text</span> 
  <span style="color: red">Random text</span>
</div>

MutationObserver 使您能够检查特定元素中的 DOM 更改,而无需对更改 DOM 的代码提出任何要求。

关于javascript - 检测 DOM 元素顺序的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40383461/

相关文章:

javascript - jQUery/JavaScript 如何 --> 将图像幻灯片转换为文字幻灯片

javascript - 在javascript中调用动态函数

javascript - 将数组的内容作为列表元素添加到无序列表

javascript - Vuejs DOM 未更新

javascript - 将数组字符串的声明拆分为字符串数组

Javascript/AJAX 异步加载旋转器

javascript - 为什么我的代码在本地表现不同并且未加载正确的 json 响应?

javascript - Highcharts 条形图不会动画

javascript - 对象类在DOMWindow的原型(prototype)链中出现两次?

javascript - 将 Shadow DOM 与 polyfill、platform.js 和 webcomponents.js 结合使用