3 回答

TA贡献1772条经验 获得超6个赞
任何属性值中任何未转义的双引号都将破坏代码。
let myExample = 'this is an "example" with double quotes';
'<textarea value="' + myExample + '"></textarea>'
这将产生以下无效的HTML混乱:
<textarea value="this is an "example" with double quotes"></textarea>
为防止出现这种情况,您可以转义所有双引号:
let escaped = myExample.replace(/"/g, '\\"');
// 'this is an \"example\" that will break'
这将产生这个有效的HTML:
<textarea value="this is an \"example\" with double quotes"></textarea>
更好的是,您可以从创建带有字符串的HTML更改为直接创建DOM元素:
// append <label>, <input>, <br> to form
function appendInput(form, labelTxt, inputName, inputValue) {
let label = document.createElement('label');
form.appendChild(label);
label.htmlFor = inputName;
label.innerHTML = labelTxt;
let input = document.createElement('input');
form.appendChild(input);
input.id = inputName;
input.name = inputName;
input.value = inputValue;
let br = document.createElement('br');
form.appendChild(br);
}
function generatePersonalForm(data) {
const form = document.createElement('form');
form.id = 'personalForm';
appendInput(form, 'First name:', 'firstname',
data.billing.contact.firstname);
appendInput(form, 'Last name:', 'lastname',
data.billing.contact.lastname);
// label and textarea
let label = document.createElement('label');
form.appendChild(label);
label.htmlFor = 'emailbody';
label.innerHTML = 'Data:';
let txtArea = document.createElement('textarea');
form.appendChild(txtArea);
txtArea.id = txtArea.name = 'emailbody';
txtArea.rows = '12';
txtArea.cols = '50';
txtArea.value = data.emailbody;
let br = document.createElement('br');
form.appendChild(br);
// submit input
let submit = document.createElement('input');
form.appendChild(submit);
submit.type = 'submit';
submit.value = 'Submit';
return form;
}
const dummyData = {
billing: {
contact: {
firstname: 'Joe',
lastname: '"the dude" Dokes'
}
},
emailbody: 'this is an "emailbody" with double-quotes'
}
window.onload = (() => {
const formData = generatePersonalForm(dummyData);
let result = document.getElementById('result');
result.appendChild(formData);
})();
<div id="result">
Result:<br>
</div>

TA贡献1784条经验 获得超9个赞
不能在 中放置超链接。 仅用于处理文本。如果您想要一个带有活动链接的简单文本,那么您应该使用div容器作为文本区域。textarea
Textarea

TA贡献1875条经验 获得超3个赞
要清理 HTML,您需要将 字符 、 、 、 和 替换为其 HTML 实体,就像以下函数一样:<>"'&
function sanitizeHTML(str){
return str.replace(/[<>"'&]/g, function(match) {
return "&#" + match.charCodeAt(0) + ";";
});
}
然后,在代码中,将 对 的调用替换为 ,您将获得不会破坏代码的清理输出。data.emailbodysanitizeHTML(data.emailbody)
添加回答
举报