【发布时间】:2019-05-15 18:28:14
【问题描述】:
我写了一个jQuery函数:
function linkify(parent, regex, url) {
var children = parent.children('main,article,div,p,li,ul,ol,span');
const re = RegExp(`(${regex})(?![^<]*>|[^<>]*<\/)`, 'ig');
children.each(function() {
linkify($(this), regex, url);
$(this).html(
$(this)
.html()
.replace(re, `<a rel="nofollow" href="${url}">$1</a>`)
);
});
}
它是一个递归函数,沿着 DOM 树向下,查找正文中出现的单词,如果找到则将它们转换为链接。
效果很好。我遇到的问题是,当我这样做时:
$(this).html(
$(this).html()
)
(即复制 HTML),它会丢弃所有绑定的事件处理程序。这意味着在真实页面中,它可能会破坏 JS 菜单等内容。
如何在复制 HTML 代码的同时保留绑定的任何内容?
PS 我检查了其他类似的帖子,但是这不同,因为此代码将包含在任意页面中 - 我需要开发一个通用解决方案,而不是特定于特定页面的解决方案。
【问题讨论】:
-
您只能将
text nodes替换为<a>${text node}</a>,因此,如果不替换整个innerHTML,您将保留其行为.... -
我可以尝试一下。换一种方式,是否可以复制绑定?
-
将
clone的this与true一起使用,这样绑定就不会被删除,然后将thisclone添加到html -
@DupinderSingh 在这种情况下如何分配绑定?你能举个简短的例子吗?
标签: javascript jquery