我正在尝试用度数符号替换所有句点。使用each方法只替换段落标记内的第一个句点,而不是所有句点。我也试图使锚标记内的句点被忽略而不被替换,因此链接不会被我的代码中断。有人可以帮忙吗?
$('div.post').each(function(){
var $h = $(this);
$h.html( $h.html().replace( '.', '<span class="period">°<\/span>' ) );
});
编辑: 我应该提到,我想保留“期间”课程,这使得它变得棘手。
答案 0 :(得分:1)
带有g
标志(全局)的正则表达式应该可以替换所有这些标记:
$h.html( $h.html().replace(/\./g, '<span class="period">°<\/span>' ) );
锚标签中不匹配句点是一个非常困难的问题,因为正则表达式在HTML文档中没有层次感上下文的感觉。我能想到的最好的方法是递归项目中你所定位和替换的HTML项目中的所有子项目,如果它是一个锚元素,则跳过它们。
答案 1 :(得分:1)
var span = $('<span class="period">°</span>').get(0);
$('p, p *').each(function (index,element) {
$.each(element.childNodes, function (index,node) {
if (node.nodeType == 3) {
$.each(node.nodeValue.split('.'), function (index,fragment) {
if ( index > 0 ) {
element.insertBefore(span.cloneNode(true),node);
}
element.insertBefore(document.createTextNode(fragment),node);
});
element.removeChild(node);
}
});
});
将解决问题。关键的想法是将每个文本节点的内容拆分为“。”中的段落。字符,将每个片段转换为新的文本节点,然后使用包含它们之间的度数符号的span元素组合新的文本节点。