【发布时间】:2021-04-20 23:44:37
【问题描述】:
JS 新手。我能找到的与我的标题相似的所有问题都太复杂了,我无法理解。
简单地说,我试图遍历一个数组并在最后返回一个结果,该结果基本上将数组的所有值添加/连接在一起。
但是,我似乎无法让它工作,因为数组中的项目是 HTML 代码块,而不是简单的字符串或数字。这是一个简化版。
HTML:
<article class="wrapper"><p>Some text 1.</p></article>
<article>No class.</article>
<article class="wrapper"><p>Some text 2.</p></article>
<article>No class.</article>
<article class="wrapper"><p>Some text 3.</p></article>
我正在想办法最终得到这段代码的模板文字:
<article class="wrapper"><p>Some text 1.</p></article>
<article class="wrapper"><p>Some text 2.</p></article>
<article class="wrapper"><p>Some text 3.</p></article>
这样我就可以将整个内容作为另一个页面上另一个元素的 innerHTML 注入。
从这个 JS 开始:
articleArray = document.querySelectorAll('.wrapper').outerHTML;
console.log(articleArray)
// This will return an array with the full HTML of the 3 "wrapper" articles as each item
然后尝试创建一个循环,该循环将在第一个循环中获取项目 1 的完整 HTML,并将其设置为类似于累加器值的东西。然后在第二个循环中,它将获取项目 2 的完整 HTML 并将其直接连接到项目 1,这将是新的累加器值。以此类推。
我在现实生活中应用它的项目远不止 3 个,否则我可以做类似 articleArray[0] + articleArray[1] + articleArray[2] 之类的事情。
我尝试了一百万种方法,但以下是最接近的尝试:
- 日志记录
var articleArray = document.querySelectorAll('.wrapper').outerHTML;
for (i = 0; i < searchWrappers.length; i++) {
searchWrapper = articleArray[i];
console.log(searchWrapper);
}
// Console log brought back 3 objects, but I need to combine them
- 连接
var articleArray = document.querySelectorAll('.wrapper').outerHTML;
var searchStr = ''
for (i = 0; i < articleArray.length; i++) {
itemHTML = articleArray[i];
fullString = searchStr += itemHTML;
console.log(fullString);
}
// This did concatenate the 3 items, but only as:
// [object HTMLElement][object HTMLElement][object HTMLElement]
// and not the actual HTML
- 连接和记录
const articleArray = document.querySelectorAll('.wrapper').outerHTML;
const sum = articleArray.reduce((accumulator, value) =>
$(accumulator).concat($(value)));
console.log(sum);
// This brought back a normal array of the 3 items again
任何帮助表示赞赏!
编辑:感谢您的所有回复!我现在将通过它们并在我的真实代码上测试您的解决方案,看看什么最有效。
【问题讨论】:
-
呃,
outerHTML返回一个字符串而不是数组。你真的在使用.children吗? -
@Bergi 哎呀,你是对的,.outerHTML 在我的真实代码中工作,这略有不同,但我在这里错误地将它翻译成我的愚蠢示例代码!
-
我已经关闭了这个,因为我不清楚你真正想要的是什么。看来您希望我们完成一项任务,但您有很多尝试显然都失败了,并且没有按照您声称的那样做。您在寻找调试吗?您提供的所有代码都没有按照您声明的方式执行(即,所有代码都会导致错误,而不是您所说的)。
-
你说你想要一个“模板文字”,但模板 literals 仅作为 JavaScript 源代码中的实际文本存在。模板文字不是数据类型。 JavaScript 源代码中的模板文字由解释器转换为字符串。它们不是容易操纵的东西。并不是说您从不想要生成一个(我有一些这样做的代码,但它实际上是在生成 JavaScript 源代码)。您实际上想要一个模板文字是非常不寻常的。你几乎肯定只想要一个普通的字符串。
-
提供更多尝试部分克隆的 HTML 结构(即包含元素和其他元素)也会对您有所帮助,因为完成此操作可能会容易得多以不同的方式,而不是您选择的方法。基本上,这似乎可能涉及XY problem,这意味着退后一步看看您正在尝试完成的实际事情可能会有所帮助,而不是询问您决定实施解决方案的方式那个问题。
标签: javascript reduce template-literals