【发布时间】:2018-05-31 16:57:20
【问题描述】:
我想将一个 HTML 标记与另一个 HTML 标记包装在一个字符串中(所以不是 DOM 元素,而是一个纯字符串)。我创建了这个函数,但我想知道是否可以在没有 forEach 循环的情况下一次性完成。
这是工作函数:
function style(content) {
var tempStyledContent = content;
var imgMatches = tempStyledContent.match(/(<img.*?src=[\"'](.+?)[\"'].*?>)/g);
imgMatches.forEach(function (imgMatch) {
var imgTag = imgMatch;
var imgSrc = imgMatch.match(/src\s*=\s*"(.+?)"/)[1];
tempStyledContent = tempStyledContent.replace(imgTag,
"<a href=\"" + imgSrc + "\" data-fancybox>" + imgTag + "</a>");
});
return tempStyledContent;
}
参数content 是一个包含HTML 代码的字符串。上面的函数输出与输入相同的 html,但带有 (fancybox) a 标记围绕所有子 img 标签。
所以输入字符串像
"<div><img src='example.jpg'/></div>"
会输出
"<div><a href='example.jpg' data-fancybox><img src='example.jpg'/></a></div>"
有人可以改进吗?我对正则表达式知之甚少,无法让它变得更好。
【问题讨论】:
-
Luca,我有这个功能,我只是想改进它。我在knockoutjs中使用这个字符串与html绑定进行绑定,所以html-string在页面上渲染出来了。
-
只能在 context 中添加改进。看不到内容(您的 HTML)的样子。任何改进都将无效。
-
克林顿,我认为代码是不言自明的,不管什么内容,只要知道它是有效的 html(如网页的 html-string,div 的 html-string以img为子),示例:var content = "";这是一个真正的简短示例,因为此评论框中没有足够的字符来制作完整的示例。但我们的目标是让输出字符串具有相同的 html,其中“img”标签被(fancybox)“a”标签包围。
-
克林顿,我更新了帖子,这确实会清楚一点,我写这篇文章的时候还在编程模式:-)
-
您是否有特殊原因要使用字符串而不是操作 DOM 元素来执行此操作?在 HTML 上使用正则表达式通常是不明智的。
标签: javascript regex