删除html元素文本中的重复单词?

时间:2018-01-10 17:55:38

标签: javascript jquery html

我在html中替换单词有一个小问题。

<p id ="demo">Hello, Hello how are you! </p>

我想要这样的最终结果: 你好,你好!

它应该过滤它以删除重复的项目,然后再加入它们。

var span = document.getElementById('demo'),
    text = span.innerHTML.split('').filter(function (allItems,i,p) {
  	return i == p.indexOf(allItems);
    }).join('');
    
    span.innerHTML = text;
<p id ="demo">Hello, Hello how are you </p>

2 个答案:

答案 0 :(得分:1)

这应该有效:

var span = document.getElementById('demo'),
  text = span.innerHTML.split(/(\W+)/).map(function(currValue, i, array) {
    if (i == array.indexOf(currValue) || i % 2)
      return currValue;
    return '';
  }).join('');

span.innerHTML = text;
<p id="demo">Hello, Hello how are you! </p>

它按任意序列的非单词字符分割,然后映射数组,如果重复该项,则返回空字符串,否则返回项目。我还保存了分隔符,以便以后可以恢复它们 - 因此检查i % 2(如果它是一个分隔符总是返回它 - 我们不想过滤它们)。

答案 1 :(得分:0)

您可以捕获每个单词,如果尚未找到该单词,请将其添加到唯一项目列表中。如果找到该单词,请将其替换。

function dedupe(string) {
  var unique = [];
  return string
    .replace(/[a-z]+/gi, function(m) {
      if (unique.indexOf(m) < 0) {
        unique.push(m);
        return m;
      }
      return '';
    })
    .replace(/\s+/, ' ');
}

let fixed = dedupe('Hello, Hello how are you!');

console.log(fixed);