【问题标题】:Javascript Alternative for Detecting Select Value Which Doesn't Use Xpath in IE?用于检测在 IE 中不使用 Xpath 的选择值的 Javascript 替代方法?
【发布时间】:2020-07-20 09:20:57
【问题描述】:

我有一个可行的解决方案来使用 Xpath 获取选择的值。发现 IE 不支持 Xpath 并抛出“XpathResult is undefined”错误!!!我正在使用 TMS (DTM),所以我必须将我的代码注入 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);
        }

    });

};

【问题讨论】:

  • 为什么不能使用form div.option-selected CSS 访问节点?
  • 你能解释一下如何使用它吗?不关注?谢谢!

标签: javascript html internet-explorer dom xpath


【解决方案1】:

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

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

【讨论】:

    【解决方案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);
        }
    });
    

    };

    【讨论】:

    • 感谢您发布此问题的解决方案。我建议你尝试在 48 小时后标记你自己对这个问题的答案,当它可以标记时。它可以在未来帮助其他社区成员解决类似的问题。感谢您的理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多