Javascript 按类抓取元素,然后对其进行更改。-Shopify/插件

Javascript 按类抓取元素,然后对其进行更改。-Shopify/插件,javascript,jquery,html,shopify,shopify-app,Javascript,Jquery,Html,Shopify,Shopify App,我的shopify商店需要一点帮助。我正在尝试更改按钮的类,以便将其样式从默认类“btn”更改为“askAQButton”。但是,按钮的代码根本不在标记中,因此我只能假设它们是由JS通过shopify插件本身生成的 我认为它应该很简单,并且我应该能够通过jquery和change类通过“id”来定位元素。但是,按钮没有ID,href也没有 我的下一个想法是可以的,按id定位父div,然后定位按钮和href的类,并以这种方式进行更改(以避免定位重复的类) 我就是不能让它工作 以下是为在我的商店页面

我的shopify商店需要一点帮助。我正在尝试更改按钮的类,以便将其样式从默认类“btn”更改为“askAQButton”。但是,按钮的代码根本不在标记中,因此我只能假设它们是由JS通过shopify插件本身生成的

我认为它应该很简单,并且我应该能够通过jquery和change类通过“id”来定位元素。但是,按钮没有ID,href也没有

我的下一个想法是可以的,按id定位父div,然后定位按钮和href的类,并以这种方式进行更改(以避免定位重复的类)

我就是不能让它工作

以下是为在我的商店页面上实现此功能而提供的所有标记:

很明显,很多内容都是不相关的(可能除了父div之外,所有内容都是无关的),但是,当我在实现此代码后加载页面时,它会在第二个输入下自动生成以下内容:


提出疑问

我不确定我是否正确回答了这个问题,但在脚本将按钮作为目标时,按钮可能还没有被注入DOM中。 在执行代码之前,请尝试等待DOMContentLoaded事件:

document.addEventListener('DOMContentLoaded',()=>{
const askAQBtn=document.queryselectoral('.wk-ask-a-question-order')[0];//可能有更好的选择器
askAQBtn.classList.replace('btn','askAQButton');
});
如果这不起作用,请查看以等待特定元素存在。我在Github上找到了一个用于此的代码片段:


这是我的答案,有点低保真度,但我希望它能给你一些工作的依据。我遵循了你关于家长部门id的想法

let parent = document.getElementById('wk-askme');
let child_nodes = parent.childNodes;

for (let i = 0; i < child_nodes.length; i++) {
  let item = child_nodes[i];
    if ($(item).attr('class') == "wk-ask-a-question-order btn") {
        $(item).attr('class', 'wk-ask-a-question-order askAQButton');
    }
}
let parent=document.getElementById('wk-askme');
让child_nodes=parent.childNodes;
for(设i=0;i
Hmm,我试图实现这一点,但它不想起作用。我不知道我是不是做错了什么,有点业余。我从来没有听说过变异观察者,所以我会仔细研究一下,看看我是否能理解它。这和我之前的情况类似,但并不完全相同。我不确定是否有更简单的方法。不管怎样,我使用了你的代码,但还没有让它工作:P我感觉我只是没有正确地实现它。好的,首先,如果你还没有添加jQuery cdn,那么这需要jQuery cdn。第二,为了进行测试,我将您的html包装在一个id为“wk askme”的父div中,以匹配您的屏幕截图,它可以工作。。那是文档中的截图吗?因为它与html的其余部分也不完全匹配。也许可以尝试使用chrome开发工具检查div并检查父div id。另外请注意,我的代码只更改了“引发查询”按钮,而不是href。