使用JavaScript删除字符串的部分

4

我有一个比较奇怪的情况,需要修复一个网站上的一个bug。当一个字符串被创建(动态地)时,在字符串前面和后面会添加5个空格。显然,最好的方法是修复后端代码并去掉这些空格...长话短说,我不能这样做,我必须使用JavaScript来解决。我不太确定如何做,但我想到了以下方法:

<!--Dynamically generated string including spaces added in backend-->
<span id="balance">     245.34     </span>

我的想法是使用JavaScript来实现以下功能。
function removespace()
{
  var oldString = document.getElementById('balance');
  var newString = (THIS IS WHERE I AM STUCK... I NEED TO REMOVE THE SPACES);
  document.getElementByID('balance').innerHTML = newString;
}

有人有什么建议吗?谢谢!

另外,我忘了提一下:我不能使用任何JavaScript库,例如Prototype或jQuery。

编辑:我已经做到了这一步……但似乎没有起作用:

<span id="balance">     $245.00     </span>

 <script>
 function removespace()
 {
   var oldString = document.getElementById('balance');
   var newString = oldString.trim ();
   document.getElementByID('balance').innerHTML = newString;
 }

 String.prototype.trim = function() {
 return this.replace(/^\s+|\s+$/g,"");
 }
 </script>

这是我使用的解决方案……在看到其他更新之前我就完成了它……但每个人都非常有帮助。

function trim(stringToTrim) {
return stringToTrim.replace(/^\s+|\s+$/g,"");
 }
 var oldString = document.getElementById('balance').innerHTML;
 var newString = trim(oldString);
 document.getElementById('balance').innerHTML = newString;

为什么必须去除空格?HTML会将连续的空格压缩成一个。因此,呈现的HTML页面应该只显示值之前和之后的一个空格(但是,这可能仍然不理想)。 - Felix Kling
因为即使它显示在前面或后面的一个空格,也会破坏页面的设计。 - Bill
好的。我已经假定了,但我想要验证一下...有时候人们会制造问题,尽管他们没有任何问题 ;) - Felix Kling
6个回答

8

不幸的是,JavaScript 没有 trim() 函数。但是你可以自己编写:

String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g,"");
}

然后执行:

var newString = oldString.trim ();

上述函数来源于此网站(Google搜索“javascript trim”第一个结果)。
编辑(根据您对问题和评论的更新):
更改
var oldString = document.getElementById('balance');

为了

var oldString = document.getElementById('balance').innerHTML;

并更改

document.getElementByID('balance').innerHTML = newString;

为了

document.getElementById('balance').innerHTML = newString; // notice the lower case d

你需要在某个时候调用removespace函数(但我相信你已经这样做了):)


1
这正是我刚要链接的内容,所以+1 :)。如果OP正在使用框架或工具包,请查看其API以获取trim()方法,以便您不会重复编写代码! - linusthe3rd
1
这是纯粹的 JavaScript 代码。不需要任何库(不要让“prototype”困扰你,它只是一种通过它可以扩展现有类的 JavaScript 特性)。 - Jan Hančič
我进行了一次编辑...但好像没有起作用。我不确定我是否正确实现了第一部分。 - Bill

0

这里是我随意写下的。

var elem = doc.getElementById('balance');
var oldString = elem.innerHTML;
elem.innerHTML=oldString.(/^\s+|\s+$/g,"")

像这样的东西吗?

编辑:是的,只有我的第一个空格被删除了,所以我从答案1中偷了一些空格 :)


这将删除所有空格,而不仅仅是尾随/前导空格。虽然在他的情况下可能不是问题。 - ThiefMaster
这只会移除第一个空格的出现。 - Jan Hančič
你说得对,Jan,我是凭想象写的,没有先考虑一下 :) - Zlatko

0

你可以尝试这样做

str.replace(/^[\s\xA0]+/, "").replace(/[\s\xA0]+$/, "");

-1
使用 trim() 函数来移除所有的空格:
var newString = oldString.trim();
或者使用 replace 函数将空格替换为空字符串:
var newString = oldString.replace(" ", "");

JavaScript 没有 trim 函数。你的第二个解决方案只会替换第一个空格的出现。 - Jan Hančič
var newString = oldString.replace(/ /g,""); // g(lobal) = 替换所有出现 - Michael Paulukonis
1
@Jan Hančič:我对哪个浏览器实现了哪个版本的JavaScript或ECMAScript没有太多的了解,但是trim()似乎是JavaScript 1.8.1(或ECMAScript 5)的一部分。 (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/trim) - Felix Kling

-1

使用jQuery很简单:

var newStr = jQuery.trim(oldStr);

1
他没有要求使用jQuery的解决方案。 - Jan Hančič
他没有具体说明不想使用jquery,而jquery也是JavaScript。 - Arief

-1
如果balance应该是一个double类型,你可以将其转换为字符串:
var c = '1234';
d = c * 1;

如果需要,可以通过以下方式将其转换回字符串:

d = c.toString();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接