6

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

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

元素 ID: #price-panel > div > span > span

尝试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')}

builtwith.com 说 javascript 是“google api”,这对谷歌搜索来说是模棱两可的,所以没有多大帮助。

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

4

2 回答 2

7

当您尝试从Dom 事件中收听文本更改时,<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>

于 2015-08-17T15:32:44.223 回答
5

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 */);
于 2015-08-17T15:29:04.973 回答