Javascript 始终从document.evaluate的iterateNext()获取空值
当在脚本中使用下面的代码时,总是为e获取nullJavascript 始终从document.evaluate的iterateNext()获取空值,javascript,dom,xpath,document.evaluate,Javascript,Dom,Xpath,Document.evaluate,当在脚本中使用下面的代码时,总是为e获取null var e = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null).iterateNext(); 但是在Chrome控制台中使用这个命令,e可以得到正确的值,为什么会发生这种情况 下面是js文件和html文件的完整代码 test.js function testClick(xpath){ var e = document.evaluate(xpath, doc
var e = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null).iterateNext();
但是在Chrome控制台中使用这个命令,e可以得到正确的值,为什么会发生这种情况
下面是js文件和html文件的完整代码
test.js
function testClick(xpath){
var e = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null).iterateNext();
// var a = e.iterateNext();
if(document.createEvent){
var event = document.createEvent('MouseEvents');
event.initEvent('click', true, false);
e.dispatchEvent(event);
}
else if(document.createEventObject){
e.fireEvent('onclick');
}
}
var xpath = "(//a[@href='./detail.html'])[1]";
setTimeout(testClick(xpath), 3000);
html
问题已解决
下面的代码可以工作,似乎无法直接调用window.onload中带有参数的方法
在window.onload中调用带参数的方法时,它将在window.onload之前执行此方法,因此该元素在方法执行时未完成加载,因此将返回null
function testClickWithParam(xpath){
var e = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null).iterateNext();
if(document.createEvent){
var event = document.createEvent('MouseEvents');
event.initEvent('click', true, false);
e.dispatchEvent(event);
}
else if(document.createEventObject){
e.fireEvent('onclick');
}
}
function testClickLink(){
var xpath = "(//a[@href='./detail.html'])[1]";
console.log(window.location.href);
testClickWithParam(xpath);
}
window.onload = testClickLink;
function testClickWithParam(xpath){
var e = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null).iterateNext();
if(document.createEvent){
var event = document.createEvent('MouseEvents');
event.initEvent('click', true, false);
e.dispatchEvent(event);
}
else if(document.createEventObject){
e.fireEvent('onclick');
}
}
function testClickLink(){
var xpath = "(//a[@href='./detail.html'])[1]";
console.log(window.location.href);
testClickWithParam(xpath);
}
window.onload = testClickLink;