我使用 CMS Webflow(网站构建器的 CMS 功能)来构建重复自身的 HTML 元素。Webflow 会自动复制这些内容。不幸的是,它还复制了元素本身和所有嵌套元素的 ID,使它们不唯一。由于种种原因,我不得不使用这个功能。
现在我使用一个嵌入式脚本用另一个(也是标题)的 innerText 覆盖特定嵌套 HTML 元素(标题)的 ID。这两个元素都位于自动复制的提到的元素内。
第二个标题文本(我要抓取其文本的参考标题)由 CMS 功能自动填充,因此是唯一的。
但是,当我将第一个标题的新 ID 记录到控制台(被第二个标题的 innerText 覆盖)时,它只是空的。在下面的代码中,我添加了带有替代代码行的注释(// 或者:),这使代码工作,但不是如所愿。
<script>
$(document).ready(function(event) {
let elementToBeChanged = $(event.target).next("#changeMyId");
let elementWithReferenceText = $(event.target).parent().next("#useMeToChangeId");
// alternatively: let elementWithReferenceText = $(this).find("#useMeToChangeId");
let newId = elementWithReferenceText.text();
// alternatively: let newId = Math.floor(Math.random()*6) // to verify that generating a unique ID each time the element gets duplicated is possible (it is)
console.log(newId) // to compare with console.log(elementToBeChanged.id) if ID was changed correctly
elementToBeChanged.id = newId;
console.log(elementToBeChanged.id); // to check if ID was changed
});
</script>
我认为代码的问题在于没有选择正确的第二个标题。奇怪的是,这个 jQuery 选择器可以工作:
let elementWithReferenceText = $(this).find("#useMeToChangeId");
但显然每次都会用相同的值覆盖 ID,因为它不是相对路径。
不幸的是,相对路径不起作用,console.log(newId) 日志只是空到控制台(我认为这一行是问题):
let elementWithReferenceText = $(event.target).parent().next("#useMeToChangeId");
我使用以下内容来验证每次元素重复时生成唯一 ID 是可能的(它是)
let newId = Math.floor(Math.random()*6)
我究竟做错了什么?