如果字符串中只有一个单词或没有空格,则使用jQuery / Javascript发出拆分字符串

时间:2013-05-01 04:50:47

标签: javascript jquery

我正在使用.split仅提取字符串中的第一个名称,通常具有名字和姓氏。只要字符串中存在空格(即名字和姓氏),这就很有效,但是当只有第一个名字时,我会将整个字符串加倍。

示例:

我有一个包含名称“John Smith”的字符串。当我使用下面的代码时,它返回“John”。大!但如果字符串只是“John”并且使用了代码,则返回“JohnJohn”。 NO!

使用此行,js将返回'John'

<p>Name: <span class="vName">John Smith</span></p> 

使用此行,js将返回'JohnJohn'

<p>Name: <span class="vName">John</span></p>

脚本:

<script>
var designerName = $('.vName').text();
designerName = designerName.split(" ")[0];
</script>

这里是jsfiddle,它使用相同的jQuery版本(v1.8.2)工作正常:http://jsfiddle.net/5yrYj/1

运行Chrome版本26.0.1410.64 m。我不明白为什么它不会在我的脚本中工作。

这是完整的功能:

function saveDesign(){
var shaftRender = $('#shaft-image-md').attr('class');
var gripRender = $('#grip-image-md').attr('class');
var labelRender = $('#label-image-md').attr('class');

gripRender = gripRender.toLowerCase().replace(/\b[a-z]/g, function(letter) {
    return letter.toUpperCase();
});
labelRender = labelRender.toLowerCase().replace(/\b[a-z]/g, function(letter) {
    return letter.toUpperCase();
});

var designerShaft = shaftRender+gripRender+labelRender;
var designerName = $('.vName').text();

//Grab only first name
designerName = designerName.split(" ")[0];
//if((/ /).test(designerName)){ designerName = designerName.split(" ")[0]; }
//designerName = (/ /).test(designerName) ? designerName.split(" ")[0]
                                    //: designerName;

$.post("saveDesign.php",
{
  name: designerName,
  shaft: designerShaft,
});

//Debug
alert(designerName); //This displays "JohnJohn"
}

无论我使用的三条.split行中的哪一行,如果原始的designerName字符串没有姓氏=空格,我仍然会得到双重名称。此时警报也会显示“JohnJohn”。

那么,如果字符串中有空格,我怎么才能调用.split代码?还是有另一种解决方案更适合我的目的吗?任何帮助将非常感谢。

感谢。

已解决: html中有一个额外的.vName实例。已删除,现在正常工作。感谢Francisco Afonso提出这个问题。

3 个答案:

答案 0 :(得分:1)

使用indexOf或其他一些首先检查字符串中是否存在空格的函数。检查是否所有浏览器都支持它,因为indexOf可能不适用于IE8或更低版本。

if (myvar.indexOf(' ') !== -1) {
    myvar = myvar.split(' ')[0];
} else {
    //No space so ignore...
}

这不是jQuery,它不一定是。 jQuery是一个很棒的框架,我推荐它用于大多数项目,但是尽可能地尝试使用本机JavaScript。它通常更快,您可以了解更多关于jQuery背后的语言。

如果你真的想使用jQuery,你可能想尝试$.inArray()检查你的分裂是否有效。

答案 1 :(得分:1)

这个简单的(纯javascript)跨浏览器行只在字符串中有空格时调用.split代码。 (就像你问的那样):

if((/ /).test(designerName)){ designerName = designerName.split(" ")[0]; }

OR:

designerName = (/ /).test(designerName) ? designerName.split(" ")[0]
                                        : designerName;

这是一个三元if语句(语法:(test) ? true : false;),其中test在测试true引用的字符串时返回falsedesignerName正则表达式/ /(一个空格) 示例jsfiddle here

答案 2 :(得分:1)

您正在使用class = vName从所有元素中使用文本值。 您有两个元素与该类,因此您正在使用它们的值的串联。 所以:“JohnJohn Smith” 还有错误。