Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript/jQuery在整个网页中替换字符(空格为 ;)_Javascript_Jquery_Regex_Replace_Typography - Fatal编程技术网

使用javascript/jQuery在整个网页中替换字符(空格为 ;)

使用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

因此,我发现replace函数,即查找所有单字母“单词”(介词和连词等),并用
替换它们后面的空格,以防止将这些字符留在行尾,应该是这样的

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&nbsp;");
});

基本上,我们抓取body元素并获取其内容,
contents()
方法将抓取文本节点以及我们想要的元素。然后我们对节点类型进行过滤,将集合减少为仅文本节点。然后我们进行正则表达式替换。

您可以尝试以下操作:

$('body').contents().filter(function(){ 
     return this.nodeType == 3;
}).each(function(){
   this.nodeValue = this.nodeValue.replace(/\s\w(?=\s)/,"$1&nbsp;");
});
var str = 'When you want to change the DispFormUrl'.replace(/ /g, '&nbsp;');
alert(str);
基本上,我们抓取body元素并获取其内容,
contents()
方法将抓取文本节点以及我们想要的元素。然后我们对节点类型进行过滤,将集合减少为仅文本节点。然后我们做正则表达式替换

var str = 'When you want to change the DispFormUrl'.replace(/ /g, '&nbsp;');
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”
而不是