代码之家  ›  专栏  ›  技术社区  ›  Jacksonkr

当此范围值更改时,如何触发事件?

  •  6
  • Jacksonkr  · 技术社区  · 10 年前

    当当前页面的股票价格发生变化时,我试图获取控制台日志。

    第页: https://www.google.com/finance?q=NASDAQ%3AGOOG&ei=yvbRVbHSCcKgmAGyu7CoDA

    元素ID: #价格面板>div>跨度>跨度

    尝试1: 失败

    $("#price-panel div span span").onchange = function() { console.log('change')}
    

    尝试2: 失败

    document.getElementById('price-panel').children[0].children[0].onchange = function() { console.log('change')}
    

    内置。com表示,javascript是“googleapi”,对谷歌搜索来说不明确,所以这没有多大帮助。

    我可以观看什么事件以了解此元素何时发生变化?

    2 回复  |  直到 10 年前
        1
  •  7
  •   fuyushimoya    10 年前

    从…起 Dom Events 当您尝试收听文本更改时 <span> 您可以使用 DOMCharacterDataModified .

    或者你可以使用 MutationObserver 以捕获更改。

    var span = document.querySelector('#test');
    var text = document.createTextNode('tttt');
    
    // This may be deprecated.
    span.addEventListener('DOMCharacterDataModified', function() {
        alert('span text changed to: ' + this.innerHTML);
    });
    
    // You may use MutationObserver instead.
    var mutateObserver = new MutationObserver(function(records) {
      console.log(records);
    });
    mutateObserver.observe(span, {
      childList: true,                                 // capture child add/remove on target element.
      characterData: true,                     // capture text changes on target element
      subtree: true,                                   // capture childs changes too
      characterDataOldValue: true  // keep of prev value
    });
    
    setTimeout(function() {
      span.innerHTML ='SSSS';
    }, 2000);
    
    setTimeout(function() {
      span.appendChild(text);
    }, 3000);
    
    setTimeout(function() {
      text.data = '3123';
    }, 4000);
    <span id="test">This is a span</span>
        2
  •  4
  •   James Donnelly    10 年前

    span 元素没有 onchange 事件您可以做的一件事是引入一个循环,定期检查当前内容和先前保存的内容,如果两者不同,则执行以下操作:

    var content = null,
        $element = $("#price-panel div span span");
    
    setInterval(function() {
        var currentText = $element.text();
    
        if (currentText != content) {
            // A change has happened
            console.log("Change");
            content = currentText;
        }
    }, 30000 /* check every 30 seconds */);