动态地将name属性添加到string - react / js中的标签

时间:2018-05-14 14:11:34

标签: javascript reactjs

简化现有职位。

说我有一个字符串

让someText = <h1>AJAX</h1> <p>AJAX is not a programming language.</p> <p>AJAX is a technique for accessing web servers from a web page.</p> <p>AJAX stands for Asyncronous JavaScript And XML.</p>

我想使用React或javascript将其更改为

someText = "<h1>test</h1><p>desc of test</p>"

对于任何标题的目录类型的功能,可以从页面的其他位置锚定

我在前端使用反应,也可以在后端使用jquery / jsdom with express

2 个答案:

答案 0 :(得分:1)

好的,这是我的解决方案:

let str = `<h1>topic 1</h1>
<p>desc of topic 1</p>

<h1>topic 2</h1>
<p>desc of topic 2</p>`;

const innerHTMLarr = str.match(/<h1>.*(?=<\/h1>)/g).map(x => x.substring(4));

const result = str.replace(/<h1>/g, function() {
  return `<h1 id="${innerHTMLarr.shift()}">`;
});

console.log(result)

首先,我匹配正则表达式中的每个<h1>。我添加了一个预测来匹配结束</h1>,但实际上没有在结果中包含它。开放<h1>无法做到同样的事情,因为JavaScript不支持后台(据我所知),因此我们必须使用substring()手动删除它。

一旦我们为每个<h1>代码设置了innerHTML,我们就可以通过查找正则表达式replace()并将其替换为"<h1>"来对整个字符串执行"<h1 id=[x]>",其中x我们上面填充的数组的第一个结果。我们在此shift()删除已使用的值。

注意:以上内容会生成无效的id属性,因为您无法在属性值中添加spaces。您可能希望扩展我的具体用例的答案。

答案 1 :(得分:0)

我真的不明白你在这里尝试做什么,但根据你的例子,一个简单的replace应该可以正常工作。

let someText = "<h1>test</h1><p>desc of test</p>"
let idInfo = "id='test'"
let replaced = someText.replace("<h1>", `<h1 ${idInfo}>`)

console.log(replaced);