用于检测 IE 中不使用 xpath 的选择值的 Javascript 替代方案?

Javascript Alternative for Detecting Select Value Which Doesn't Use Xpath in IE?

提问人:Michael Johns 提问时间:4/8/2020 更新时间:4/9/2020 访问量:76

问:

我有一个可行的解决方案来使用 Xpath 获取选择的值。发现 IE 不支持 Xpath,并抛出“XpathResult 未定义”错误!!我正在使用 TMS (DTM),因此我必须将代码注入 Web 应用程序。我无法触摸 Web 应用代码。在研究这个问题时,我读到图书馆(https://github.com/google/wicked-good-xpath)可以解决这个问题,但我没有那个选择。如果你去第一页的 https://apply.essexcredit.com/,你只会看到一个选择“你对什么类型的贷款感兴趣?我需要在此元素上设置一个事件侦听器并获取所选值(RV 或 Boat 等)。我可以使用任何其他方法来将事件侦听器附加到此事件并获取值?这是我当前拥有的代码,在支持 Xpath 时有效:

  function _dtmSetProductSel() {

    window.addEventListener("click", function() {

   var prodSel = document.evaluate("//form/div/div/div/div/div/div/div/div/div/div/div/div/div/div/div[@class='option-selected']", document, null, XPathResult.ANY_TYPE, null).iterateNext();

      if (prodSel) {
            var currProd = prodSel.getAttribute("title");

            if (currProd == "RV" || currProd == "Boat" || currProd == "Auto" || currProd == "Auto-IBG" || currProd == "Investment Line of Credit") {

                sessionStorage.setItem("_dtmSelProd", currProd);
            }

        } else {

            setTimeout(_dtmSetProductSel, 1000);
        }

    });

};
javascript html internet-explorer dom xpath

评论

0赞 supputuri 4/8/2020
为什么不能使用CSS访问节点?form div.option-selected
0赞 Michael Johns 4/8/2020
您能解释一下如何使用它吗?不关注?谢谢!

答:

0赞 supputuri 4/8/2020 #1

检查是否可以如下图所示使用。document.querySelector

var prodSelCSS = document.querySelector("form div.option-selected")

enter image description here

0赞 Michael Johns 4/9/2020 #2
function _dtmSetProductSel() {
window.addEventListener("click", function() {
    var prodSel = document.getElementsByClassName("option-selected");
    var tryAgain = true;
    for(var i=0;i<prodSel.length;i++) {
        var currProd = prodSel[i].getAttribute("title");
        if(currProd && (currProd == "RV" || currProd == "Boat" || currProd == "Auto" || currProd == "Auto-IBG" || currProd == "Investment Line of Credit")) {
            sessionStorage.setItem("_dtmSelProd", currProd);
            tryAgain = false;
            break;
        }
    }
    if(tryAgain) {
        setTimeout(_dtmSetProductSel, 1000);
    }
});

};

评论

0赞 Deepak-MSFT 4/9/2020
感谢您发布此问题的解决方案。我建议您尝试在 48 小时后标记您自己对这个问题的答案,当它可以标记时。它可以在未来帮助其他社区成员解决类似的问题。感谢您的理解。