0

我有这段代码在一个单词/短语中添加了一些空白,如下所示:

"I drove everywhere by car" > "I d_o_e e_e_y_h_r_ _y c_r_"

如何对其进行转换,使其产生一个有点不同的结果:

"I drove everywhere by car" > "I d___e e___y___r_ b_ c__"

不同之处在于它会显示每个单词的第一个字母,然后显示 3 个字母的间隙,如果单词足够长,则显示第 5 个字母,再显示 3 个字母的间隙,依此类推。

这段代码:

var str = document.getElementById("dropped-v").innerHTML;
letters = '';
for (var i = 0, len = str.length; i < len; i++) { 
    if (i % 2 != 0 && str[i] != ' ') { 
        letters += '<span class="hint">_</span>'; 
    } 
    else {
       letters += str[i]; 
    } 
}
document.getElementById("dropped-v").innerHTML = letters;
4

1 回答 1

2

这是没有句点的简单句子的一种方法。您可以根据需要添加周期支持和 HTML 注入。

let MASK = '_';

function obfuscate_word(word) {
  const letters = [...word];
  const mask_letters = letters.map((letter, i) => i % 4 == 0 ? letter : MASK);
  return mask_letters.join('');
}

function obfuscate_sentence(sentence) {
  const words = sentence.split(' ');
  const mask_words = words.map(word => obfuscate_word(word));
  return mask_words.join(' ');
}

const s = "I drove everywhere by car"
console.log(s);
console.log(obfuscate_sentence(s));

如果您愿意,您可以替换 MASK 并获取/设置您的 HTML,如下所示:

MASK = '<span class="hint">_</span>';
const e = document.getElementById("dropped-v");
e.innerHTML = obfuscate_sentence(e.innerHTML);

这假设dropped-v元素的内部 HTML 是一个简单的句子(例如,而不是包含标记的先前混淆的句子)。

于 2021-10-05T17:17:15.270 回答