Что я могу использовать вместо DOMSubtreeModified? - PullRequest
3 голосов
/ 17 ноября 2011

Я работаю над пользовательским сценарием для Opera, и Opera не поддерживает DOMSubtreeModified , Есть ли альтернативный метод для измененного поддерева?

ПРИМЕЧАНИЕ. Я ищуРешение только в JavaScript.(не jquery или любая библиотека javascript)

Спасибо.

1 Ответ

8 голосов
/ 17 ноября 2011

Выберите нужные вам узлы, а затем используйте интервальный таймер для проверки изменений.

Ключ выбирает интересующие вас узлы, например:

<div id="content"><p class="author"> ... </p> 
... 
</div>

Может бытьВы хотите узлы "автора".
Вы бы сканировали их, используя querySelectorAll("#content p.author") внутри таймера.

Примерно так: псевдо код:

setInterval (MyNodeCheckFunc, 500);

function MyNodeCheckFunc () 
{
    var newNodeList     = [];
    this.oldNodeList    = this.oldNodeList  ||  [];

    var targetNodes     = document.querySelectorAll ('VALID CSS-STYLE SELECTOR');
    if (targetNodes  &&  targetNodes.length > 0) 
    {
        /*--- Found target node(s).  Go through each and act if they
            are new.
        */
        for (var J = targetNodes.length - 1;  J >= 0;  --J) 
        {
            var targNode = targetNodes[J];

            newNodeList.push (targNode);

            if (! targNode.weHaveProcessed) 
            {
                targNode.weHaveProcessed    = true;

                //// DO STUFF FOR NEW NODE.
            }
        }
    }

    /*/// HERE, COMPARE newNodeList TO oldNodeList.
        1)  If an item is in oldNodeList, but not in newNodeList, 
            do any DELETED NODE action.

        2)  If an item is in a different order from oldNodeList 
            to newNodeList, do any MOVED NODE action.
    */
    this.oldNodeList = newNodeList;
}
...