最近遇到一个需求,写一个公共的js方法,用xpath获取页面中的元素的值,然后找了一下,发现可以这样获取:
function _x(STR_XPATH) {
var xresult = document.evaluate(STR_XPATH, document, null, XPathResult.ANY_TYPE, null);
var xnodes = [];
var xres;
while (xres = xresult.iterateNext()) {
xnodes.push(xres);
}
return xnodes;
}
写了一个扩展程序 把这段js运行在页面中 发现获取iframe元素会有取不到的情况 js中获取iframe元素的方法如下:
document.getElementById('iframe的ID').contentWindow.document.getElementById('元素的ID')
受这个启发,把函数改写了一下:
function getAllNode(xpath,iframeId){
if(arguments.length == 1 || (arguments.length > 1 && (!iframeId || iframeId=="null" || iframeId=="undefined" || iframeId=="none"))){
var xresult = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null);
}else if(arguments.length > 1){
var xresult = document.getElementById(iframeId).contentWindow.document.evaluate(xpath, document.getElementById(iframeId).contentWindow.document, null, XPathResult.ANY_TYPE, null);
}
var xnodes = [];
var xres;
while (xres = xresult.iterateNext()) {
xnodes.push(xres);
}
return xnodes;
}
测试了一下 一层iframe的情况下是可以取到iframe里的元素的 多层iframe嵌套的情况没有测试 可能会不行