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」であり、Google 検索にはあいまいであるため、あまり役に立ちませんでした。

この要素がいつ変更されるかを知るために、どのイベントを見ることができますか?

4

2 に答える 2

7

Dom Eventsから、テキストの変更をリッスンしようとすると、DOMCharacterDataModified<span>を使用できる場合があります。

または、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

spanonchange要素にはイベントがありません。できることの 1 つは、ループを導入して、現在のコンテンツと以前に保持されたコンテンツを定期的にチェックし、2 つが異なる場合に何かを行うことです。

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 に答える