gpt4 book ai didi

jquery - 使用 MutationObserver 比较新旧文本内容

转载 作者:行者123 更新时间:2023-12-01 04:34:59 24 4
gpt4 key购买 nike

我需要比较更改发生之前和之后元素子级内的文本。我可以使用下面的脚本触发函数并返回新值,但我还需要能够访问旧值。

$('#changeButton').click(
function() {
var currentValue = parseInt($('#changingElement').text())
$('#changingElement').text(currentValue+1);
}
)


$(function() {
var parentOfChangingElement = document.getElementById("changingElementParent");
var alertOldAndNewValue = function() {
alert("I'm unsure how I get the 'old' value");
alert('New value: ' + $('#changingElementParent').text());
}
var observer = new MutationObserver(function(e) {
alertOldAndNewValue();
});
observer.observe(parentOfChangingElement, {
subtree: true,
childList: true
});
});
.button {
border: 1px solid black;
font-weight: normal;
margin-bottom: 10px;
padding: 10px;
width: fit-content;
}
.button:hover {
font-weight: bold;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>

<div id="changeButton" class="button">
Click me to change value
</div>

<div id="changingElementParent">
<div>
<div id="changingElement">
100
</div>
</div>
</div>

如果有人有任何想法,我将非常感激。

提前谢谢您!

最佳答案

您需要使用 Mutation Observer 吗?或者使用全局变量可以吗?

有很多方法可以做到这一点...贝娄是最快的解决方案。我可以根据您的反馈进行更新,因此请随时在评论部分询问我任何问题。

跟踪先前值的最简单方法是在处理函数结束时始终保存它。

在下面的示例中,在 changeButton 函数的末尾,我刚刚将 previousValue 更新为与 newValue 相等。

当页面初始加载时,previousValue 与 currentValue 相等。

// global variable
const changeBtn = document.getElementById('changeButton');
const target = document.getElementById('changingElement');


// Save previous_value in a data attribute, if global variables are not an option
target.dataset.previousValue = parseInt(target.innerText);

changeBtn.addEventListener('click', function(e){

let previousValue = target.dataset.previousValue
currentValue = parseInt(target.innerText),
newValue = currentValue + 1;

target.innerText = newValue;

console.log('ClasicWay: previous value is ' + previousValue);
console.log('ClasicWay: new value is ' + newValue);

// all processing ended at this point,
// so we can update or previousValue to currentValue
target.dataset.previousValue = currentValue;
})




// Observer way
const observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
console.log("MutationObserverWay: previous value is ", mutation["removedNodes"][0]["nodeValue"]);
console.log("MutationObserverWay: new value is ", mutation["addedNodes"][0]["nodeValue"]);
});
});


observer.observe(
target,
{
childList: true,
}
);
.button {
border: 1px solid black;
font-weight: normal;
margin-bottom: 10px;
padding: 10px;
width: fit-content;
}
.button:hover {
font-weight: bold;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>

<div id="changeButton" class="button">
Click me to change value
</div>

<div id="changingElementParent">
<div>
<div id="changingElement">100</div>
</div>
</div>

关于jquery - 使用 MutationObserver 比较新旧文本内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59178893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com