使用javascript/jQuery在整个网页中替换字符(空格为 ;)
因此,我发现replace函数,即查找所有单字母“单词”(介词和连词等),并用使用javascript/jQuery在整个网页中替换字符(空格为 ;),javascript,jquery,regex,replace,typography,Javascript,Jquery,Regex,Replace,Typography,因此,我发现replace函数,即查找所有单字母“单词”(介词和连词等),并用替换它们后面的空格,以防止将这些字符留在行尾,应该是这样的 myString.replace(/\s\w(?=\s)/,"$1 ") 现在如何将其应用于网页上的所有文本?我正在寻找一些通用的解决方案,一个简单的函数,我把它放进,而不需要更改网页中的任何其他内容 多谢各位 您可以尝试以下方法: function replaceText(node) { var current = node.node
替换它们后面的空格,以防止将这些字符留在行尾,应该是这样的
myString.replace(/\s\w(?=\s)/,"$1 ")
现在如何将其应用于网页上的所有文本?我正在寻找一些通用的解决方案,一个简单的函数,我把它放进
,而不需要更改网页中的任何其他内容
多谢各位 您可以尝试以下方法:
function replaceText(node)
{
var current = node.nodeValue;
var replaced = current.replace(searchpattern, replacepattern);
node.nodeValue = replaced;
}
function traverse(node)
{
var children = node.childNodes;
var childLen = children.length;
for(var i = 0; i < childLen; i++)
{
var child = children.item(i);
if(child.nodeType == 3)//or if(child instanceof Text)
replaceText(child);
else
traverse(child);
}
}
function replaceAll()
{
traverse(document.body);
}
$('body').contents().filter(function(){
return this.nodeType == 3;
}).each(function(){
this.nodeValue = this.nodeValue.replace(/\s\w(?=\s)/,"$1 ");
});
基本上,我们抓取body元素并获取其内容,
contents()
方法将抓取文本节点以及我们想要的元素。然后我们对节点类型进行过滤,将集合减少为仅文本节点。然后我们进行正则表达式替换。您可以尝试以下操作:
$('body').contents().filter(function(){
return this.nodeType == 3;
}).each(function(){
this.nodeValue = this.nodeValue.replace(/\s\w(?=\s)/,"$1 ");
});
var str = 'When you want to change the DispFormUrl'.replace(/ /g, ' ');
alert(str);
基本上,我们抓取body元素并获取其内容,contents()
方法将抓取文本节点以及我们想要的元素。然后我们对节点类型进行过滤,将集合减少为仅文本节点。然后我们做正则表达式替换
var str = 'When you want to change the DispFormUrl'.replace(/ /g, ' ');
alert(str);
结果:“当您想要更改disformURL时”
结果:“当您想更改DisplatformURL时”谢谢!也许最好将包括replaceAll()调用在内的所有内容放入$(document).ready(function(){//dostuff when DOM is ready});不使用?我不知道jQuery,但是如果你在jQuery中是这样做的
onload
,是的,你可以这样做。所以这个解决方案工作得很好,我最终发现正确的正则表达式是最新的。替换(/(\s\w)\s/g,$1\xA0”);谢谢,谢谢!也许最好将包括replaceAll()调用在内的所有内容放入$(document).ready(function(){//dostuff when DOM is ready});不使用?我不知道jQuery,但是如果你在jQuery中是这样做的onload
,是的,你可以这样做。所以这个解决方案工作得很好,我最终发现正确的正则表达式是最新的。替换(/(\s\w)\s/g,$1\xA0”);谢谢你这看起来更好:-)正是我在寻找的一种“黑客”,特别是这个由nodeType提供的过滤器-我不知道。感谢便条我的节点类型错了。。本来应该是3
的时候是1
-我已经更正了我的答案。谢谢。它似乎对我仍然不起作用。正如我在js控制台中看到的,this.nodeValue是无效的。有什么想法吗?这真的能让你像OP想做的那样插入HTML吗?既然您只是在更改文本节点的nodeValue,那么它不是只插入文本“”,而不是实际插入HTML实体吗?@Martin要在文本节点中插入不间断的空格,您可以使用“\xA0”
而不是”
,这看起来更好:-)正是我想要的一种“黑客”,尤其是这个节点类型的过滤器——我不知道。感谢便条我的节点类型错了。。本来应该是3
的时候是1
-我已经更正了我的答案。谢谢。它似乎对我仍然不起作用。正如我在js控制台中看到的,this.nodeValue是无效的。有什么想法吗?这真的能让你像OP想做的那样插入HTML吗?由于您只更改文本节点的nodeValue,它是否只插入文本“”,而不是实际插入HTML实体?@Martin要向文本节点插入不间断的空格,您可以使用“\xA0”
而不是”