【问题标题】:Wrap innerHTML in div在 div 中包装 innerHTML
【发布时间】:2019-01-31 16:12:52
【问题描述】:

我有一个 JS 函数,可以在变量更改时更新产品描述。这里是元素更新的地方。

    Product.Config.prototype.updateProductShortDescription = function(productId) {
var shortDescription = this.config.shortDescription;
if (productId && this.config.childProducts[productId].shortDescription) {
    shortDescription = this.config.childProducts[productId].shortDescription;
}
$$('#product_addtocart_form div.short-description').each(function(el) {
    el.innerHTML = shortDescription;
});
};

效果很好,但希望将输出包装在 div 中。有谁知道在更新前将 innerHTML 包装在标签中的方法吗?

谢谢。

【问题讨论】:

  • 可能是wrap 方法?
  • 请为您的问题添加所有相关代码,以便我们更好地帮助您:html、js ....

标签: javascript innerhtml


【解决方案1】:

如果您只是设置文本,请不要使用innerHTML。它非常不安全,并且会很高兴地执行脚本并联系您使用的文本可以通过简单地包含一些恶意 HTML 代码来指示浏览器执行的任何服务器。

改用.textContent 属性。

但更好的是,因为看起来你无论如何都在使用 jQuery,只需使用 jQuery 的内置方式来根据需要构造元素:

let div = $(`<div></div>`).text(description);
$(`.my-element`).append(div);

如果你已经有元素:

let update = $(`<div></div>`).text(description);
$(`#your.query-selector goes:here()`).empty().append(update);

(因为 jQuery 允许您以一种使它们应用于选择中的每个元素的方式链接调用,这会将 div 包装的描述设置为查询结果中每个元素的内容)

【讨论】:

  • 我偶然发现了这个答案,并想知道innerHTML 的不安全性是否也适用于不允许通过(直接+未经处理的)文本输入进行用户交互的静态网站.如果shortDescription 不可通过用户输入写入,但假设需要后端访问才能进行修改,那么这应该不是问题,对吧?
  • 你提出了一个很好的观点,我已经更新了答案以匹配。
【解决方案2】:

我不知道你的 $$ 函数是从哪里来的,但是我在 vanilla JS 中提出了建议:

const descriptionText = "my short description";
const descriptionElements = document.querySelectorAll('#product_addtocart_form div.short-description');

Array.from(descriptionElements).forEach(function(el) {
  const newDiv = document.createElement('div');
  newDiv.classList.add('customDiv');
  newDiv.textContent = descriptionText;
  el.appendChild(newDiv);
});
div {
  border: 1px dotted silver;
  padding: .5em;
  margin: .25em;
}
<div id="product_addtocart_form">
  <div class="short-description">1</div>
  <div class="short-description">2</div>
  <div class="short-description">3</div>
</div>

编辑:

阅读您的第一条评论后,您只需在代码中替换:

  el.innerHTML = shortDescription;

作者:

  const descWrapper = document.createElement('div');
  descWrapper.innerHTML = shortDescription;
  el.appendChild(descWrapper);

【讨论】:

  • 对不起,我应该发布完整的功能。我一直试图把它放在反引号中,但它似乎不允许我!我已经编辑了我的 OP 以显示完整的功能。
  • 谢谢你。如何为 div 分配一个类?我假设这会将 shortDescription 放在 div 中?
  • descWrapper.classList.add('classToAdd');descWrapper.className = 'classToAdd';。您可以在 MDN 上找到有关 classListclassName 的更多详细信息。
猜你喜欢
  • 1970-01-01
  • 2014-06-07
  • 1970-01-01
  • 2017-05-04
  • 2019-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多