簡體   English   中英

始終從iterateNext()獲取null值以獲取document.evaluate

[英]Always get null value from iterateNext() for document.evaluate

當在腳本中使用以下代碼時,e始終為null

var e = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null).iterateNext();

但是在Chrome控制台中使用此命令,可以獲取正確的值,為什么會發生這種情況?

這是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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
    <script type="text/javascript" src="../js/test.js"></script>
</head>
<body>
    <ul>
        <li class="carmen-li"><a href="./detail.html">1</a></li>
        <li><a href="./detail.html">2</a></li>
        <li><a href="./detail.html">3</a></li>
    </ul>
</body>
</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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM