[英]Defining prototype property for JavaScript for XML prototype functions
我正在使用此链接(http://km0.la/js/mozXPath/)提供的自定义javascript函数,以在FireFox中实现特定的XML功能。
这是代码:
// 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内容,下面是一个如何访问名为“ cd_rank”的XML标签的示例:
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”?
好的,我想我想出了如何在函数中添加它,可能是由于运气而不是逻辑:
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";}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.