2012-05-21 2 views
2

В моем userscript я создал крюк document.createElement кода, который я использовал это решение, предоставляемые Брки Адамса в следующей почтеПолучить innerHTML из [объекта XrayWrapper [объекта HTMLDivElement]] объект

Log a web page's dynamically-created, DOM elements with a userscript

Теперь, когда я запускаю этот usercript в firefox и печатаю elem в LogNewTagCreations() методе console.log(elem) Я получаю вывод как [object XrayWrapper [object HTMLDivElement]] в этом формате. Теперь, как я могу получить innerHTML свойство тега или весь тег, как этот <div>Sometext</div>, так что я могу получить innerHTML от этого

ответ

5

Казалось бы, что XrayWrapper используется Greasemonkey, чтобы обернуть вокруг DOM элементов является довольно несовершенной обертке , поскольку он действительно не поддерживает приемник/сеттер innerHTML.

Я написал вам упрощенную рекурсивную реализацию innerHTML, назовите ее так: html(element). Он игнорирует все, кроме элементов, атрибутов и текстовых узлов, но должен выполнять свою задачу до тех пор, пока XrayWrapper поддерживает другие атрибуты DOM . Я использую в функции.

var html = (function() { 
    var ELEMENT = this.Node?Node.ELEMENT_NODE:1, 
     TEXT = this.Node?Node.TEXT_NODE: 3; 
    return function html(el, outer) { 
    var i = 0, j = el.childNodes, k = outer?"<" + (m = el.nodeName.toLowerCase()) + attr(el) + ">":"", 
     l = j.length, m, n; 
    while(i !== l) switch((n = j[i++]).nodeType) { 
     case ELEMENT: k += html(n, true); break; 
     case TEXT: k += n.nodeValue; 
    } return k + (outer?"</" + m + ">":""); 
    }; function attr(el) { 
    var i = 0, j = el.attributes, k = new Array(l = j.length), l, m; 
    while(i !== l) k[i] = (m = j[i++].nodeName) + "=\"" + el.getAttribute(m) + "\""; 
    return (l?" ":"") + k.join(" "); 
    } 
})(); 
+0

hi witiko, я столкнулся с тем же, что и [объект XrayWrapper [object HTMLLIElement]], когда я пытался получить ли. Поэтому я хочу преобразовать эти элементы li в объект HTML, где я хочу проверить $ («# result li»). Each (function (index) {}. Но когда я вызываю функцию ur html(), как, я получаю html is а не функция.Как я могу использовать функцию ur для преобразования в объект HTML? – kitokid

+0

@kitokid, вы можете задать свой вопрос – SomeKittens

+0

@SomeKittens yes. Я хочу, но я боюсь, что он будет закрыт из-за того, что он был отмечен как дубликат. – kitokid

Смежные вопросы