Определение свойства прототипа для JavaScript для функций-прототипов XML - PullRequest
0 голосов
/ 23 июня 2011

Я использую пользовательские функции JavaScript, предоставленные по этой ссылке (http://km0.la/js/mozXPath/) для реализации определенных функций XML в FireFox.

Вот код:

// mozXPath
// Code licensed under Creative Commons Attribution-ShareAlike License 
// http://creativecommons.org/licenses/by-sa/2.5/
if( document.implementation.hasFeature("XPath", "3.0") ) {
    if( typeof XMLDocument == "undefined" ) { XMLDocument = Document; }
    XMLDocument.prototype.selectNodes = function(cXPathString, xNode) {
        if( !xNode ) { xNode = this; }
        var oNSResolver = this.createNSResolver(this.documentElement);
        var aItems = this.evaluate(cXPathString, xNode, oNSResolver, 
                     XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
        var aResult = [];
        for( var i = 0; i < aItems.snapshotLength; i++) {
            aResult[i] = aItems.snapshotItem(i);
        }
        return aResult;
    }
    XMLDocument.prototype.selectSingleNode = function(cXPathString, xNode) {
        if( !xNode ) { xNode = this; } 
        var xItems = this.selectNodes(cXPathString, xNode);
        if( xItems.length > 0 ){ return xItems[0]; }
        else{ return null; }
    }
    Element.prototype.selectNodes = function(cXPathString) {
        if(this.ownerDocument.selectNodes) { 
            return this.ownerDocument.selectNodes(cXPathString, this);
        }
        else { throw "For XML Elements Only"; }
    }
    Element.prototype.selectSingleNode = function(cXPathString) {   
        if(this.ownerDocument.selectSingleNode) {
            return this.ownerDocument.selectSingleNode(cXPathString, this);
        }
        else { throw "For XML Elements Only"; }
    }
}

Предполагая, что объект XML был определен и загружен содержимым XML, вот пример того, как можно получить доступ к тегу XML с именем "cd_rank":

var cd_rank_XMLObj = XMLObj.selectSingleNode("cd_rank");

То, что я хочу сделать, это добавить свойство "nodeTypedValue" в функцию selectSingleNode (), но я не уверен, как это сделать. В функции Element.prototype.selectSingleNode я попытался добавить:

this.prototype.nodeTypedValue = this.textContent;

Однако, это дает мне ошибку, говоря, что это не определено. Я даже попытался добавить его за пределы функции, просто чтобы заглушить его и получить концепцию, и там также говорится, что она не определена:

var XMLObj.selectSingleNode.prototype.nodeTypedValue = XMLObj.textContent;
alert(XMLObj.selectSingleNode("cd_rank").nodeTypedValue);

По сути, я пытаюсь добавить свойство prototype в функцию prototype. Но мне нужна помощь с этим. Как я могу добавить "nodeTypedValue", так что я пишу "XMLObj.selectSingleNode (Path) .nodeTypedValue"?

1 Ответ

0 голосов
/ 17 октября 2011

Ладно, думаю, я понял, как добавить его в функцию, вероятно, из-за удачи, а не логики:

Element.prototype.selectSingleNode = function(cXPathString){    
    if(this.ownerDocument.selectSingleNode) {
        var result = this.ownerDocument.selectSingleNode(cXPathString, this);
        if (result != null) {
            result.nodeTypedValue = result.textContent;
        }
        return result;
    }
    else{throw "For XML Elements Only";}
}
...