Chrome 插件 - jQuery 访问元素的子节点

Chrome Plugin - jQuery access child nodes of element

提问人:Mariano Schmands 提问时间:8/24/2023 更新时间:8/27/2023 访问量:27

问:

我正在尝试创建一个 Chrome 插件,该插件将链接广告到定义的 ul 的每个 li 元素。 我在使用jQuery访问此元素时遇到问题。

我试过了,但无法访问它。const ideaList = $("ul.idea-list");

我只访问DOM中非常高的元素。 const mainContent = $(“#main 内容”); 所以我试图找到 children() 并找到 (“*”),但它不起作用。 它的长度始终为 0。

enter image description here

<div data-v-32ba3100="" id="main-content" class="clearfix"><!----> 
  <div data-v-4396a345="" data-v-32ba3100="" class="designlist page-wrapper">
    <multiple divs>
    <div data-v-0f00a344="" data-v-4396a345="" class="design-list-view">
          <ul data-v-0f00a344="" class="idea-list">
             <li></li>
             <li></li>  

这是从 DevTools 复制的选择器 #main 内容 > div > div > div > div > div.design-list-view > ul > li

内容.js

$(document).ready(function () {
    const mainContent = $("#main-content"); // works

    const children = mainContent.find("*"); //not working

    const ideaList = $("ul.idea-list"); // not working
    console.log(ideaList);
    if (ideaList.length > 0) {
        // Select all <li> elements within the 'idea-list' <ul> using jQuery
        const liElements = ideaList.find("li");

        // Loop through the <li> elements and add a link to each one using jQuery
        liElements.each(function () {
            const link = $("<a>", {
                href: "https://www.example.com", // Replace with the desired link URL
                text: "Visit Example Website", // Replace with the desired link text
            });

            $(this).append(link);
        });
    }

});

javascript jquery dom google-chrome-extension

评论

0赞 mplungjan 8/24/2023
const ideaList = $("ul.idea-list");如果它在脚本运行时存在,则会起作用。在 UL 存在后在控制台中尝试。如果这不起作用,那么它有可能不在同一个 DOM 中。例如,如果他们使用 iFrame
0赞 Mariano Schmands 8/24/2023
如果我输入:console.log($(“ul.idea-list”));<ul data-v-0f00a344 class=“idea-list”><li data-v-0f00a344 class=“idea-list-heading”>...</li>flex<li data-v-0f00a344>...</li><li data-v-0f00a344>...</li><li data-v-0f00a344>...</li><li data-v-0f00a344>...</li><li data-v-0f00a344>...</li>
0赞 mplungjan 8/24/2023
因此,您需要将脚本推迟到页面中存在 UL - 它似乎是在页面加载后加载的。你能检查一下吗?
1赞 mplungjan 8/24/2023
然后你可以把它缩短到$("ul.idea-list li").each(function() { ... };
2赞 wOxxOm 8/24/2023
这是一个动态添加元素的现代网站。使用 MutationObserver 等待元素。

答:

0赞 Mariano Schmands 8/27/2023 #1

将 MutationOberserver 添加到元素 ul.idea-list li 中。因此,只有当元素存在时,该过程才会开始。