2 回答
TA贡献1784条经验 获得超8个赞
您不需要将所有内容存储在数组中然后循环两次。这样做您会将控制权交给 DOM 元素。
将您的代码缩短为:
for (let i = 0; i < inputs.length; i++) {
if (badStuff.includes(inputs[i].value.toLowerCase())) {
inputs[i].value = inputs[i].value.replace(inputs[i].value, "****");
}
}
for (let i = 0; i < textareas.length; i++) {
if (badStuff.includes(textareas[i].value.toLowerCase())) {
textareas[i].value = textareas[i].value.replace(textareas[i].value, "****");
}
}
另一方面
input和textarea字段可能有很多单词在 badStuff 数组中,所以 badStuff.includes(full_value)对你来说还不够,你的方法应该是
var badStuff = ["bad1", "bad2", "bad3"];
var str = "hello bad1, how bad2"
badStuff.some(v => {
if (str.includes(v)) {
str = str.replace(v, "****")
}
})
console.log(str);
更新
您的最终代码可以是:
for (let i = 0; i < inputs.length; i++) {
badStuff.some(v => {
if (inputs[i].value.toLowerCase().includes(v)) {
inputs[i].value = inputs[i].value.replace(v, "****")
}
})
}
for (let i = 0; i < textareas.length; i++) {
badStuff.some(v => {
if (textareas[i].value.toLowerCase().includes(v)) {
textareas[i].value = textareas[i].value.replace(v, "****")
}
})
}
TA贡献1789条经验 获得超8个赞
只要您的元素是表单字段,您就应该将元素而不是它们的值推送到数组中,并且在您的 for 循环中,value如果需要,更新它们的属性。下面是一个例子:
const badStuff = [
'censure',
'blacklist',
'reprehend'
];
let submittedWords = [];
function validateText() {
const inputs = document.querySelectorAll('input');
// get all the input fields
for (let i = 0; i < inputs.length; i++) {
submittedWords.push(inputs[i]);
}
const textareas = document.querySelectorAll('textarea');
// add all the textareas
for (let i = 0; i < textareas.length; i++) {
submittedWords.push(textareas[i]);
}
// loop through the form field elements and if their value matches an item in badStuff, replace the original value with a censored version
for (let i = 0; i < submittedWords.length; i++) {
const element = submittedWords[i];
if (badStuff.includes(element.value.toLowerCase())) {
element.value = element.value.replace(element.value, "****");
}
}
// clear submittedWords array after each check
submittedWords = [];
}
document.querySelector('form').addEventListener('submit', function(e) {
e.preventDefault();
submittedWords = [];
validateText();
})
<form>
<input name="test" type="text" value="" />
<textarea type="text" value=""></textarea>
<input type="submit" value="submit" />
</form>
添加回答
举报