Javascript:替换 html 中的字符串,而不破坏未来事件处理程序的元素
Javascript: Replace string in html without destroying the elements for future event handlers
我有这段代码,它搜索给定的字符串(_aff.tractionsCode
(并将其替换为另一个字符串(tractionsId
(,如下所示:
content = document.body.innerHTML.replace(_aff.tractionsCode, tractionsId);
document.body.innerHTML = content;
下面是一个示例:
假设_aff.tractionsCode
等于 {tractionsCode}
<div class="affiliate" rel="{tractionsCode}">{tractionsCode}</div>
它需要替换 {tractionsCode} 的两个实例
但是,问题是一旦发生这种情况,它就会替换加载的html,因此我可能或(很可能(无法访问的其他javascript事件处理程序不再正常运行。
有没有办法查看 html(包括 rel 等属性(并运行替换而不覆盖所有 html?
还是有更好的方法?
感谢您的帮助!
哎哟!您正在尝试做的事情可能可以通过大量工作和迭代节点(不是元素(来实现......但何必呢?通过将范围限定为 DOM 子节的模板和使用委托的事件处理程序组合在一起,使此类工作变得最简单。
JSRender(https://github.com/BorisMoore/jsrender(是以前的jQuery模板插件(https://github.com/jquery/jquery-tmpl(的替代品,但jquery-tmpl仍然相当可用(我相信pandora仍然使用它(。您可以使用非 javascript 类型将模板存储在脚本块中,并轻松提取该内容以呈现和替换 DOM 的特定子部分:
<script id="affiliateThing" type="text/x-jquery-tmpl">
<div class="affiliate" rel="${transactionsCode}">${transactionsCode}</div>
</script>
<script>
jQuery("#affiliateThing").
tmpl([{'transactionsCode': 'wee'}]).
appendTo("#someElement");
</script>
若要确保替换此标记不会破坏任何事件处理程序,请确保通过父元素委托事件:
jQuery("#someElement").on("click", ".affiliate", function(event){alert('wee');});
此语句将事件处理程序绑定到"#someElement"而不是单个".affiliate"元素,但仅在事件源自".affiliate"元素时触发处理程序。
享受!
编辑:这个和模板系统的后端库完全不重要。然而,技术是。混合使用范围模板和委托事件,您就是黄金。
通过body
innerHTML
将覆盖所有内容。您需要搜索要替换的特定文本节点。
类似的东西..
document.getElementBy..('identifier').innerHTML
在jQuery中,
$('.className').text('text to insert');
- keyup事件处理程序更改焦点不适用于快速键入
- 提示使用服务器端事件处理程序激活JavaScript
- 将事件处理程序绑定到任何可能的事件
- 正在将事件处理程序添加到不存在的类
- dropdown.js中的复杂事件处理
- 在循环中附加事件处理程序时出现浏览器性能问题
- 在同一个javascript事件处理程序中调用不同的函数
- 复选框,然后单击事件处理
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 检查事件处理程序参数
- 实现延迟的jquery更改事件处理程序
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- 如何使jQuery的“bind”或“on”事件处理程序幂等
- 带有参数的Javascript事件处理程序
- Jquery事件处理程序仅适用于匿名函数
- 如何从另一个处理程序内部取消JavaScript事件处理程序函数的执行
- 如何在 JavaScript 代码中调试点击事件处理
- 如何在jQuery事件处理程序中存储和重用超时
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- Javascript:替换 html 中的字符串,而不破坏未来事件处理程序的元素