【问题标题】:Highlighted a specific string within a div突出显示 div 中的特定字符串
【发布时间】:2018-10-16 18:21:30
【问题描述】:

我在 jsFiddle 中有一个简单的 HTML 页面,应该打开 .txt 日志文件:

var openFile = function(event) {
  var input = event.target;
  var reader = new FileReader();
  reader.onload = function() {
    var text = reader.result;
    var node = document.getElementById('output');

    node.innerText = text;
  };
  reader.readAsText(input.files[0]);
};

var status = '<h2><br/><center>I want to change the colour of the >>> @ <<< symbol</center></h2>',
  newStatus = status.replace(/@/g, '<span class="atSign">@</span>');
console.log(newStatus);

document.getElementById('output').innerHTML = newStatus;
.atSign {
  color: #f90;
}
<center>
  <h1>.TXT Log Parser</h1>
</center>

<center>
  <h2><input type='file' accept='text/plain' onchange='openFile(event)'></h2>
</center>
<br/>
<div id='output'>...</div>

链接到 JSFiddle 项目:

https://jsfiddle.net/baivong/60py489j/

正如您在示例中看到的,我可以将输出读取为文本,甚至可以做一些 JS 和 CSS 来更改特定字符串中特定字符的颜色。

由于.txt日志的内容不在我的html或js中,你建议我如何在#output中突出显示内容?

【问题讨论】:

    标签: javascript html css html-parsing highlighting


    【解决方案1】:

    onload函数中,需要将text替换为格式化的HTML。

    注意不要将上传的文本单独插入为字符串替换的 HTML;这将允许执行任意脚本(和其他东西)。相反,将文本按@s 拆分,并在每个段(最后一个段除外)后附加一个样式化的span

    var openFile = function(event) {
      var input = event.target;
      var reader = new FileReader();
      reader.onload = function() {
        var text = reader.result;
        var output = document.getElementById('output');
        
        const lines = text.split('\n');
        lines.forEach((line) => {
          const div = output.appendChild(document.createElement('div'));
          const textSplitAroundAt = line.split('@');
          textSplitAroundAt.forEach((text, i) => {
            div.appendChild(document.createTextNode(text));
            if (i === textSplitAroundAt.length - 1) return;
            const span = div.appendChild(document.createElement('span'));
            span.textContent = '@';
            span.className = 'atSign';
          });
        });
      };
      reader.readAsText(input.files[0]);
    };
    .atSign {
      color: #f90;
    }
    <center>
      <h1>.TXT Log Parser</h1>
    </center>
    
    <center>
      <h2><input type='file' accept='text/plain' onchange='openFile(event)'></h2>
    </center>
    <br/>
    <div id='output'>...</div>

    【讨论】:

    • 嗨,CertainPerformance,太棒了!我可以看到你对 OnLoad 函数做了什么。它有效:) 我遇到的一个问题是格式已更改。在更改之前随意测试文本解析器,并在添加“output.appendChild”后再次测试。知道这是否可以保留 .txt 文件的原始格式吗? (即:内联/识别换行符)
    猜你喜欢
    • 2021-12-12
    • 1970-01-01
    • 2011-09-04
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2017-08-29
    相关资源
    最近更新 更多