【问题标题】:How to find an html element that matches all keywords?如何找到匹配所有关键字的html元素?
【发布时间】:2021-10-23 22:20:43
【问题描述】:

我正在为自己编写一个类似于 bot 的 chrome 扩展程序,其中一个功能是为特定 html 元素解析一个随机站点,该元素包含用户以自定义顺序提供的所有关键字和.click() 它。这两个我都做不到。

我尝试了一下 jQuery 的 :contains 选择器,发现像我在下面提供的命令只适用于预定义数量的关键字。

至于.click() 的问题。出于某种原因,它在我的情况下不起作用。这对我来说看起来很奇怪,因为同时 '.remove()' 工作得很好。

这是我要实现的目标的“.js”文件:

$(document).ready(function() {
    console.log('ready');
    findItem();
});

function findItem() {
    chrome.storage.local.get("settings", function (data) {
        //var newWindow = window.open('SOME SITE URL', 'single');

    if (data.settings.keyWords) {
        
        //code piece that makes an array out of keywords string
        //stored in chrome storage and removes empty elements
        let pkString = data.settings.keyWords;
        const pkArr = pkString.split(", ");
        Object.keys(pkArr).forEach(pk => {
            if (pkArr[pk] == "") {
                pkArr.pop();
                console.log('popped');
            } else {
                console.log(`'${pkArr[pk]}'`);
            }
        });

        if (pkArr) {
            //i basically need something like that but for random amount of keywords
            $(`div:contains("${pkArr[0]}"):contains("${pkArr[1]}"):contains("${pkArr[2]}"):contains("${pkArr[3]}"):contains( ... )`).click();
        }
    }
};

【问题讨论】:

    标签: javascript jquery html-parsing


    【解决方案1】:

    您可以映射每个关键字并将其组合成一个选择器,如下所示:

    $(`div${pkArr.map(keyword => `:contains("${keyword}")`).join('')}`).click();
    

    您可能还想检查pkArr 中是否至少有1 个元素,否则,它将匹配页面上的所有<div/> 元素。

    至于click() 部分,这可能是由多种原因造成的。该元素不是正确的元素,或者它没有附加点击事件侦听器。不太确定,但浏览器也可以阻止它。

    【讨论】:

    • 不,我的选择器是对的。我正在尝试找到与所有用户关键字匹配的确切元素。主要问题是制作一个可以采用自定义数量的关键字的搜索命令
    • 它似乎工作得很好,感谢日志,我想我会接受答案。您能否简要解释一下您编写的选择器背后的逻辑?现在对我来说它看起来有点神秘。至于 click() 的事情。假设它不是浏览器,我不能尝试使它工作吗?
    • 您有一个包含关键字的数组。通过使用Array#map,关键字被组合成一个选择器字符串。所以现在每个 Array 元素都将包含:contains(keyword)。最后,使用空字符串使用Array#join 组合所有元素。这将连接所有元素而没有任何分隔符。有关点击事件的更多信息,请查看此question
    猜你喜欢
    • 2021-12-19
    • 2022-10-19
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    相关资源
    最近更新 更多