格式化由 javascript 加载的文本文件
Formatting text file loaded by javascript
所以我有一个面板,它在运行时从服务器加载一个平面文件文本聊天日志,该日志在浏览器中每秒更新一次。 它看起来像这样:
/chat/Chat_yyyy-mm-dd.log
23:25:10 : Global: Colin Fox: testing
23:25:19 : Direct: Colin Fox: testing
23:25:23 : Direct: Martinez Soto: test
23:25:29 : Global: Martinez Soto: test
现在,我在JS将文本文件加载到的页面中有一个文本框:
<textarea name="globeChat" id="globeChat" cols="50" rows="8" class="form-control" style="resize:none" readonly>No messages to display!</textarea>
最后是Javascript完成工作:
<script>
var d = new Date();
var month = d.getMonth()+1;
var day = d.getDate();
var year = d.getFullYear();
var file = '/chat/Chat_'+year+'-'+
((''+month).length<2 ? '0' : '')+month+'-'+
((''+day).length<2 ? '0' : '')+day+'.log';
$(function chatText(){
$.ajax({
url : file,
dataType : 'text',
success : function(data){
$("#globeChat").html(data);
}
});
$("#globeChat").scrollTop($("#globeChat")[0].scrollHeight);
setTimeout(chatText, 1000);
})();
</script>
现在,我要完成的下一件事是格式化页面上的文本。 有什么方法可以用正则表达式或其他东西做到这一点吗? 就像将日期设置为深灰色,频道基于频道名称的特定颜色(IE,红色表示全局,蓝色表示直接),然后用户名将是任何颜色,后跟消息的黑色文本。 所以它看起来像这样:
<b>23:25:10</b> <i>Global</i> <u>Colin Fox</u>: testing
然后我可以使用 CSS 格式化 #globeChat b、#globeChat i 和 #globeChat u。
我知道如何使用 PHP 做到这一点,方法是将文件读入数组并使用正则表达式和循环用格式化的 HTML 将其吐出。 但是我如何使用javascript/Jquery在运行时每秒做到这一点(如果需要,我可以将其设置为5或其他东西)?
编辑:
由于它们都不起作用,我最终创建了一个聊天.php页面。 并有一个 $_GET 来定义日期偏移量,并使其包含文件并将其格式化到聊天中.php然后用聊天填充div.php:
<script>
var file = "chat.php";
$(function chatText() {
$.ajax({
url: file,
dataType: "html",
success: function(response){
$("#todayChat").html(response);
}
})
setTimeout(chatText, 1000);
})();
</script>
利用.text()
,.split()
RegExp
/'b'n[^$]/
,/':(?='s)/
; $.each()
, switch()
var body = $("body");
$("textarea").text(function(_, text) {
var arr = text.split(/'b'n[^$]/);
$.each(arr, function(key, line) {
var l = line.split(/':(?='s)/);
$.each(l, function(index, el) {
switch(index) {
case 0: body.append("<b>" + el +"</b>"); break;
case 1: body.append("<i>" + el + "</i>"); break;
case 2: body.append("<u>" + el + "</u>:"); break;
case 3: body.append(el + "<br>"); break;
}
})
});
return text
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<body>
<textarea>
23:25:10 : Global: Colin Fox: testing
23:25:19 : Direct: Colin Fox: testing
23:25:23 : Direct: Martinez Soto: test
23:25:29 : Global: Martinez Soto: test
</textarea><br>
</body>
所以我弄乱了它,我不知道如何将文件加载到 函数并写入文本区域,而不是从文本区域写入 到对象。
请注意,不能在<textarea>
元素中设置<b>
、<i>
、<u>
元素的样式。textarea
文本的value
,而不是html
元素呈现。
你可以用contentEditable
属性替换<div>
元素textarea
以呈现b
、i
、u
容器中的元素,用户可以在其中编辑文本。
更新后的success
函数与使用.text()
参数不同。 data
是返回的响应文本,要在 $.ajax()
success
处解析;success
的第二个参数是 textStatus
。
您应该能够调整html
和js
以达到预期的结果
.html
<div id="globeChat" contentEditable>
</div>
.css
div[contentEditable] {
border:1px solid dodgerblue;
}
.js
$(function chatText() {
$.ajax({
url: file,
dataType: "text",
success: function(data) {
var arr = data.split(/'b'n[^$]/);
console.log(arr, data);
$.each(arr, function(key, line) {
var l = line.split(/':(?='s)/);
$.each(l, function(index, el) {
switch (index) {
case 0:
strTxt += "<b>" + el + "</b>";
break;
case 1:
strTxt += "<i>" + el + "</i>";
break;
case 2:
strTxt += "<u>" + el + "</u>:";
break;
case 3:
strTxt += el + "<br>";
break;
};
});
});
$("#globeChat").html(strTxt).focus();
return data;
}
})
});
var strTxt = "";
var data = "23:25:10 : Global: Colin Fox: testing'n" + "23:25:19 : Direct: Colin Fox: testing'n" + "23:25:23 : Direct: Martinez Soto: test'n" + "23:25:29 : Global: Martinez Soto: test";
var arr = data.split(/'b'n[^$]/);
console.log(arr, data);
$.each(arr, function(key, line) {
var l = line.split(/':(?='s)/);
$.each(l, function(index, el) {
switch (index) {
case 0:
strTxt += "<b>" + el + "</b>";
break;
case 1:
strTxt += "<i>" + el + "</i>";
break;
case 2:
strTxt += "<u>" + el + "</u>:";
break;
case 3:
strTxt += el + "<br>";
break;
};
});
});
$("#globeChat").html(strTxt).focus();
div[contentEditable] {
border: 1px solid dodgerblue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<div id="globeChat" contentEditable>
</div>
JSFIDDLE https://jsfiddle.net/ffvpuhe4/
- 使用不带文本文件的OpenLayers显示POI
- 使用javascript从文本文件中获取值
- 从javascript中的文本文件中获取值
- 在移动浏览器上显示大型文本文件
- 搜索文本文件并附加到表中
- 将文本文件加载到javascript中
- Angular http.get没有'我不喜欢在开头和结尾加方括号的文本文件
- 一个javascript实现base64图像编码并将结果写入文本文件
- 用javascript读取文本文件的第一行
- 从文本文件js中读取列表
- 使用JavaScript将压缩文本文件加载到字符串中
- 数组在手动写入时有效,但从文本文件加载时无效
- 在浏览器中打开文本文件-服务器上出现错误
- html表单,它有文本和表,现在我想在一个简单的文本文件中保存和检索数据,如何实现它
- 任何编写文本文件并将其替换为上一个文本文件的方法
- html或java脚本代码在硬盘中创建一个文本文件
- Firefox插件:保存到文本文件的HTTP日志,其中包含时间、用户名、计算机名;t创建文本文件
- 从文本文件加载jsondata时出现空白页
- 如何在不干扰电子邮件通知的情况下将眼镜保存在文本文件中
- 使用javascript创建新的文本文件(),但存储[objectFile]而不是文本