iul*_*net 5 javascript jquery dom
我有以下代码:
<div>
<span>Random text</span>
<span style="color: red">Random text</span>
</div>
Run Code Online (Sandbox Code Playgroud)
并且,使用代码,我有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());
}
Run Code Online (Sandbox Code Playgroud)
这个例子过于简单了.订单由用户使用第三方库完成,该库不会告诉我订单是否实际更改,只需告诉我它何时开始和完成.
如何检测DOM元素的顺序是否实际发生了变化?我在其中的信息不能使用,因为它可以完全相同,如示例中所示.
Dek*_*kel 15
如果要检查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);Run Code Online (Sandbox Code Playgroud)
<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>Run Code Online (Sandbox Code Playgroud)
这MutationObserver使您能够检查特定元素中的DOM更改,而无需更改DOM的代码.
| 归档时间: |
|
| 查看次数: |
1568 次 |
| 最近记录: |