如何用html元素包装字符串的一个区域?
How could I wrap an area of a string with an html element?
如果我有如下内容:
$ 400/周 $ 800/周有了jQuery,在像<span class='small'>/week</span>
这样的html元素中包装"/week"部分的理想方法是什么?
你可以这样做:
var data = $("#text").html();
$("#text").html(data.replace(/'/'s*week/g, '<span class="small">/week</span>'));
工作示例:http://jsfiddle.net/jfriend00/TKa8D/
注意:替换HTML将撤销在该HTML中分配的任何事件处理程序,因此您通常应该在尽可能低的级别替换HTML,这样您就不会替换已经具有事件处理程序的元素。如果您分享您的特定HTML,我们可以提供更具体的建议,以最简单的方式。
这样做并不美观,但唯一安全的方法(保留事件处理程序等)是遍历树,在必要时拆分文本节点。不幸的是,jQuery不喜欢处理文本节点;它是以元素为中心的。
你可以先定义一个辅助函数来完成递归:
function recurse(node, fn) {
if(node.nodeType === Node.TEXT_NODE) {
fn(node);
}else if(node.nodeType === Node.ELEMENT_NODE) {
var children = Array.prototype.slice.call(node.childNodes);
for(var i = 0, l = children.length; i < l; i++) {
recurse(children[i], fn);
}
}
}
遍历树中的每个节点,为每个文本节点调用给定的函数。然后我们可以使用该函数分割文本节点并在中间插入一个span
:
recurse(document.documentElement, function(node) {
var re = /('$'d+)('/week)/;
var match;
while(match = re.exec(node.nodeValue)) {
var before = document.createTextNode(node.nodeValue.substring(0, match.index + match[1].length));
node.parentNode.insertBefore(before, node);
var span = document.createElement('span');
span.className = 'week';
span.textContent = node.nodeValue.substring(match.index + match[1].length, match.index + match[0].length);
node.parentNode.insertBefore(span, node);
node.nodeValue = node.nodeValue.substring(match.index + match[0].length);
}
});
。
相关文章:
- 在Javascript中,检查一个区域中的所有像素是否都为空
- 使用jQuery只选择SVG地图上的一个区域
- 如何将值从区域转移到另一个区域
- 使用 javascript vs jquery 将元素从一个区域移动到另一个区域
- 如何使 html 页面的一个区域重定向到另一个 URL,而页面的其余部分保持不变
- 如何使用 D3.js 在带有按钮的一个区域中创建/显示具有相同数据的图表的多次迭代
- 让这个javascript函数滚动到一个区域
- 一次只选择一个区域
- 如何指定除了一个区域之外的css位置?轨道
- 在Marionette中从一个区域切换到另一个区域时,视图无法正确渲染
- 用java将datetime转换为另一个区域设置datetime
- 如何在html 5画布中删除一个区域的剪辑
- 在地图上为一个区域生成随机点
- 如何将一个区域分割成给定的贴图
- 如何在地图上用渐变绘制一个区域
- 将元素从一个区域拖动到另一个区域
- 主干/木偶-处理一个区域的多种布局
- 找出向量层是一条线还是一个区域(小册子)
- 从一个地方复制输入并将其用作变量或使用onclick在另一个区域使用
- 如何用html元素包装字符串的一个区域?