【问题标题】:How can I attach a handler to an innerHTML change inside a <span>?如何将处理程序附加到 <span> 内的 innerHTML 更改?
【发布时间】:2014-10-03 16:31:26
【问题描述】:

如何检测&lt;span&gt; 元素内部的更改我需要将处理程序附加到它但无法成功。

这是我的html:

<span class="pad-truck-number-position"><?php echo $_SESSION['truckId']; ?></span>

这是我的 javascript/jQuery:

<script type="text/javascript">
    var changedText = $('.pad-truck-number-position').text();
    alert(changedText);
    $(changedText).on('change',function() {
        alert("changed");   
    });
</script>

alert(changedText) 工作正常。但是当跨度内的文本发生变化时,它不会提醒alert("changed");

这就是我更改元素的方式:

          truckTable.$('tr.selected').removeClass('selected');
        $(this).addClass('selected');
        var nTds = $('td', this);
            var index = $(nTds[0]).text();
            $.ajax({
                type: "POST",
                url : "content/right-up/trucks.php/",
                data: { truckid : index },
                headers : {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'}
            }).done(function(response){
                $('.pad-truck-number').text(index);
                $('.pad-truck-number-position').text(index);
                $('#mapContent').load("content/left-up.php");
                $('#right-down-tab-truck').tabs('load', 0);
                $('#right-down-tab').hide();
            $('#right-down-tab-truck').show();
            });

【问题讨论】:

  • 如何更改 span 内的文本。 jsFiddle 将提供更多帮助。
  • "This event is limited to &lt;input&gt; elements, &lt;textarea&gt; boxes and &lt;select&gt; elements." api.jquery.com/change
  • @Sadikhasan 我已经编辑了我的问题。

标签: javascript php jquery html


【解决方案1】:

你可以试试:

执行一次:

  jQuery('.pad-truck-number-position').one("DOMSubtreeModified",function(){   
         //Notice the .one not .on
         //Your code
 });

或多次:

 jQuery('.pad-truck-number-position').on("DOMSubtreeModified",function(){   

         //Your code
 });

【讨论】:

  • 我需要处理程序执行多次。
【解决方案2】:

你可以绑定DOMSubtreeModified来检查里面的文字是否被修改:

<script type="text/javascript">
var changedText = $('.pad-truck-number-position').text();
alert(changedText);
$('.pad-truck-number-position').bind('DOMSubtreeModified', function(event) {
    alert('changed');
});
</script>

或者使用突变观察者:

<script type="text/javascript">
var changedText = $('.pad-truck-number-position').text();
var element = $('.pad-truck-number-position')[0];
// var original_text = element.text();

var observer = new MutationObserver(function( mutations ) {
    mutations.forEach(function( mutation ) {
        var newNodes = mutation.addedNodes;
        if( newNodes !== null ) {
            alert('changed');
        }
    });
});

var config = { attributes: true, childList: true, characterData: true };
observer.observe(element, config);
</script>

这是一个很好的find

【讨论】:

  • @DOCSAREL 你绑定DOMSubtreeModified 在那个特定的元素上
  • 我认为 DOMSubtreeModified 已被弃用。我在这里读到了w3.org/TR/DOM-Level-3-Events/#event-type-DOMSubtreeModified
  • jQuery 绑定还是 JS 绑定?
  • 除了对我来说是个谜之外,这种辨别力是如何起作用的 jq bind 自 1.7 以来已被弃用。
猜你喜欢
  • 2012-07-28
  • 1970-01-01
  • 2016-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-21
  • 2022-06-24
  • 1970-01-01
相关资源
最近更新 更多