【问题标题】:Always get null value from iterateNext() for document.evaluate总是从 iterateNext() 为 document.evaluate 获取空值
【发布时间】:2014-02-07 16:42:29
【问题描述】:

当在脚本中使用下面的代码时,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, 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> 

【问题讨论】:

    标签: javascript dom xpath document.evaluate


    【解决方案1】:

    问题已解决。

    这个,下面的代码,有效,似乎不能直接调用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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-27
      • 1970-01-01
      相关资源
      最近更新 更多