javascript - 是否可以从 JSON 文件中获取长字符串值并在 HTML 中显示时将其拆分为行?
问题描述
我有一个包含长字符串值的 JSON 文件。
JSON位于此链接
是否可以将“入站”中的值拆分为更多行以便在 HTML 中更好地显示?
目前显示是这样的
这是我目前的 JS 代码:
let requestURL = 'https://raw.githubusercontent.com/danilovuita/MobileWebDevProject-HitchHike/main/database/HitchDB.json';
let request = new XMLHttpRequest();
request.open('GET', requestURL);
request.responseType = 'json';
request.send();
const lenHelper = request.response;
request.onload = function() {
const Hitch = request.response;
console.log(Hitch);
for( var i = 0 ; i < Hitch.length;i++){
appendData(Hitch[i]);
}
}
function appendData(obj){
// const myHeader = document.createElement('h2');
// myHeader.textContent = obj.City;
// $('#Cities').append(myHeader);
const myDivRow = document.createElement('div');
myDivRow.className = "row";
const myDivCol = document.createElement('div');
myDivCol.className = "col";
const myCard = document.createElement('div');
myCard.className = "card mt-3";
const myCardHeader = document.createElement('div');
myCardHeader.className = "card-header";
const myCardBody = document.createElement('div');
myCardBody.className = "card-body";
const cityName = document.createElement('p');
cityName.className = "text-primary"
cityName.textContent = obj.City;
const routesInb = document.createElement('p');
routesInb.textContent = obj.Routes.Inbound;
//const routesOutb = document.createElement('p');
//routesOutb.textContent = obj.Routes.Outbound;
myCardBody.appendChild(routesInb);
//myCardBody.appendChild(routesOutb);
myCardHeader.appendChild(cityName);
myCard.appendChild(myCardHeader);
myCard.appendChild(myCardBody);
myDivCol.appendChild(myCard);
myDivRow.appendChild(myDivCol);
$('#appendable').append(myDivRow);
}
解决方案
获取信息、查看其结构并分离组件的做法称为解析。
您的“入站”数据是普通英语的文本,因此我们谈论的是Natural Language Parsing。这不是我们任何人都可以在单个 stackoverflow 答案中涵盖的主题。但是你可以做一些简单的事情。
(1)使用if,检查文本的长度,如果超过一定长度,则仅分隔行(段落...)。
(2) 根据关键标记进行拆分。例如,查找“.”将找到句子分隔符(前提是您的文本布局正确):
const routesText = obj.Routes.split('. ')
您可以寻找替代的分隔符,例如,如果您的文本始终以相同的方式结构化,则可以使用关键字、其他标点符号、单行或双新行(使用 '\n' 或 '\n\n')
(3) 处理你的分离元素数组。如果您只想将每个句子放在单独的行或段落中,您可以重新加入它们,在以下之间添加一个新行:
routesInb.innerHtml = routesText.join(".<br />")
或者,每句一个段落:
routesInb.innerHtml = routesText.map(t=>('<p>'+t+'.</p>')).join("")
(4) 一个过程可以更精细,例如每段放两个句子,或者将你的文本分成2(或N)个大致相等长度的段落,或者在句子的开头使用关键字来决定它们是否开始一个段落。 . 但是你永远不会得到一个自然的印象,即文本是由一个理解其含义的作家布置的。
我没有问你是否对原始数据有任何控制权?因为如果是这样,您应该确保数据包含用于布局的 HTML,或者可能包含稍后可以用 HTML 布局替换的降价线索(如 '\n\n')。
推荐阅读
- validation - 如何验证 Nest.js 中的可选参数?
- python - django-select2:如果没有选择国家,如何禁用城市选择?(django 2.2)
- c++ - decltype(auto) 类型推导:return x vs. return (x)
- firebase - Firebase 托管 - 404 index.html - 想要指向 index.js
- python - Django - 在脚本中更改模型字段并迁移
- python - 更新 conda 会导致降级和取代软件包
- pytorch - 为自定义模型加载 state_dict 时出错
- sql - 使用递归查询从表中获取电子邮件线程
- java - Java中的MAC ISO 9797-1 MAC算法3和填充方法1?
- java - 如何将 html select 中的变量作为 PathVariable 传递?