javascript - 分割字符串以创建 HTML 链接

标签 javascript regex

我正在使用一个 API,它返回带有内联链接的字符串,如下所示:

This is a question I'm asking on <my_link type="externalLink" data="https://stackoverflow.com/">StackOverflow</my_link> about splitting a string and reconstructing as a HTML link.

这样做的原因显然是为了让 Web 和 native 平台都可以使用 API,并且 HTML 远离数据。还有 internalLink 类型,允许应用开发者链接到应用内的内容,而无需打开网络浏览器。

我需要能够将此字符串传递到函数中并返回带有标签的完整字符串,如下所示:

This is a question I'm asking on <a href="https://stackoverflow.com" target="_blank">StackOverflow</a> about splitting a string and reconstructing as a HTML link.

要考虑的另一件事是字符串中可以有多个链接。

我最初的尝试是基本的,确实从第一个链接获取了 externalLink,但我不确定如何获取 data 属性的值,然后重新运行任何其他链接。

export default function convertLink(string) {
  let stringWithLinks = string;

  if (string.includes('<my_link')) {
    const typeStart = string.indexOf('"') + 1;
    const typeEnd = string.indexOf('"', typeStart);
    const typeText = string.substring(typeStart, typeEnd); // externalLink
  }

  return stringWithLinks;
}

最佳答案

您可以将字符串设置为 .innerHTML动态创建的元素并使用 .getAttribute()获取 data <my_link> 的属性元素,集合.innerHTML动态创建的<a>元素及使用.replaceChild()替换<my_link><a>元素

let str = `This is a question I'm asking on <my_link type="externalLink" data="https://stackoverflow.com/">StackOverflow</my_link> about splitting a string and reconstructing as a HTML link.`;

let div = document.createElement("div");

div.innerHTML = str;

let my_links = Array.prototype.map.call(div.querySelectorAll("my_link"), link =>
                 link.getAttribute("data"));

console.log(my_links);

for (let link of my_links) {
  let a = document.createElement("a");
  a.href = link;
  a.target = "_blank";
  a.innerHTML = div.querySelector("my_link").innerHTML;
  div.replaceChild(a, div.querySelector("my_link"))
}

console.log(div.innerHTML);

关于javascript - 分割字符串以创建 HTML 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47205888/

相关文章:

javascript - JavaScript<->DOM 循环引用在现代浏览器中安全吗?

javascript - 最常见的 HTML 模板语言

JavaScript 表单,带验证

javascript - 通过将 replace() 与合适的正则表达式一起应用,避免将 '-' 作为用户输入

javascript - JQuery/DOM元素 "click"事件注册: on ("click") VS click() VS addeventlistener ("click")

javascript - 在 JavaScript 中用 1 替换多个\n

excel - 正则表达式函数将段落拆分为句子以进行 Power 查询

c# - 正则表达式匹配前面没有字母的数字

java - java中如何组合多个正则表达式?

javascript - 如何避免可见性的瞬间转变