let str = '[左哼哼]你好[微笑]世界[哈哈]',str2 = '你好世界';function scrmTextEmojiRenderFn(value) {const reg = /\[+[^\[\]]+\]/g;if (value === null || value === undefined || value === '') value = '';const fragment = document.createDocumentFragment();let renderRes = value,renderArr = [...value.matchAll(reg)];if (renderArr.length > 0) { let renderResArr = [];renderArr.forEach(item => {let renderItemTemplate = {name: '',index: '',length: '',};renderItemTemplate.name = item[0];renderItemTemplate.index = item['index'];renderItemTemplate.length = renderItemTemplate.name.length;renderResArr.push(renderItemTemplate);})const renderEmojiFn = (name, spanDom, renderRes) => { spanDom.classList.remove('chat-emoji');spanDom.innerText = "[" + name + "]";renderRes.append(spanDom);};renderRes = document.createDocumentFragment();renderResArr.forEach((item, i) => {let { name, index, length } = item;name = name.split("[")[1].split("]")[0];let spanDom = document.createElement('span');spanDom.classList.add('chat-emoji');let renderText = '',rendertextSpan = document.createElement('span');if (i === 0) { renderText = value.slice(0, index);rendertextSpan.innerText = rendertextSpan;renderRes.append(rendertextSpan); renderEmojiFn(name, spanDom, renderRes); if (renderResArr.length === 1) { let nextRendertext = value.slice(index + length),nextRendertextSpan = document.createElement('span');nextRendertextSpan.innerText = nextRendertext;renderRes.append(nextRendertextSpan); }} else if (i === renderResArr.length - 1) { renderText = value.slice(length + index); let preItem = renderResArr[i - 1],preIndex = preItem.index + preItem.length,renderPreText = value.slice(preIndex, index), renderPreTextSpan = document.createElement('span');renderPreTextSpan.innerText = renderPreText;renderRes.append(renderPreTextSpan);renderEmojiFn(name, spanDom, renderRes);rendertextSpan.innerText = renderText;renderRes.append(rendertextSpan);} else {let preItem = renderResArr[i - 1],preIndex = preItem.index + preItem.length;renderText = value.slice(preIndex, index);rendertextSpan.innerText = renderText;renderRes.append(rendertextSpan);renderEmojiFn(name, spanDom, renderRes);}})} else {const renderResSpan = document.createElement('span');renderResSpan.innerText = renderRes;renderRes = renderResSpan;}fragment.append(renderRes);return fragment;
}console.log(scrmTextEmojiRenderFn(str));
console.log(scrmTextEmojiRenderFn(str2));
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!