jquery - jQuery:如果内容更改为某些文本,则执行某些操作
问题描述
我想隐藏/显示 Y div,基于 X div 的内容,但 X div 在页面加载后填充(通过 jQuery)。如何使用 jQuery 检测此内容更改。
这是我试图实现的一个例子(不工作):
https://codepen.io/aida-stamo/pen/GXmVgW
$('#field-first-div').change(function() {
$('#first-div').text($(this).val());
});
// what I want to happen but is not happening
if ($("#first-div").text() == 'first-value') {
$("#second-div").hide();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="field-first-div" name="field-first-div">
<option value=""></option>
<option value="first-value">first-value</option>
<option value="second-value">second-value</option>
</select>
<div id="first-div"></div>
<div id="second-div">second div content</div>
请不要将此标记为重复。我查看了其他类似的问题,但找不到答案,因为它们要么对已加载的内容执行操作,要么处理选择标签。
解决方案
您可以使用该DOMSubtreeModified
事件:
var first = $('#first-div'),
second = $("#second-div");
$('#field-first-div').change(function() {
first.text($(this).val());
});
// this will check if any changes happen to the contents of the first div:
first.on('DOMSubtreeModified', function() {
if ($(this).text() == 'first-value') {
second.hide();
} else {
second.show();
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="field-first-div" name="field-first-div">
<option value=""></option>
<option value="first-value">first-value</option>
<option value="second-value">second-value</option>
</select>
<div id="first-div"></div>
<div id="second-div">second div content</div>
jquery
虽然它似乎已被弃用,取而代之的是MutationObserver
var targetNode = $('#first-div');
// Options for the observer (which mutations to observe)
var config = {
attributes: false,
childList: true,
subtree: false
};
// Callback function to execute when mutations are observed
var callback = function(mutationsList) {
for (var mutation of mutationsList) {
if (mutation.type == 'childList') {
if (targetNode.text() === 'first-value') {
$('#second-div').hide();
} else {
$('#second-div').show();
}
}
}
};
// Create an observer instance linked to the callback function
var observer = new MutationObserver(callback);
// Start observing the target node for configured mutations
observer.observe(targetNode[0], config);
$('#field-first-div').change(function() {
targetNode.text($(this).val());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="field-first-div" name="field-first-div">
<option value=""></option>
<option value="first-value">first-value</option>
<option value="second-value">second-value</option>
</select>
<div id="first-div"></div>
<div id="second-div">second div content</div>
推荐阅读
- python - PyGitHub:无法访问我团队的私有存储库
- php - 使用 Ajax 在 wordpress admin 中使用 FPDF 生成 PDF
- excel - 如何在 Internet Explorer 弹出窗口上按保存?
- javascript - 在 Javascript 中使用 ECMAScript 6 特性;何时使用粗箭头函数等?
- javascript - 如何将智能合约返回的地址转换为可读字符串?
- javascript - 如何知道网络应用程序和可执行应用程序是否同时处于活动状态
- markerclusterer - 如何使用 getMarkers() 方法获取 Marker 的自定义属性?
- rust - 无法在 Rust 中重现错误的缓存行共享问题
- sql - 在 case when 语句中按列号排序表
- oracle - 使用 unicode 转义有效负载生成 hmac sha1,oracle plsql