0

我使用此链接提供的自定义JavaScript函数(http://km0.la/js/mozXPath/)在FireFox中实现特定的XML功能。为XML原型函数定义JavaScript的原型属性

下面是代码:

// 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); 

基本上我想要做的,我想,就是添加一个原型属性转换为原型功能。但我需要一些帮助。我如何添加“nodeTypedValue”,使我写“XMLObj.selectSingleNode(Path).nodeTypedValue”?

回答

0

好吧,我觉得我想通了,如何将它添加的功能里面,可能更多的运气比因逻辑:

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";} 
}