0

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

例子:

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

使用这一行,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 行中的哪一个,如果原始设计器名称字符串没有姓氏 = 空格,我仍然会得到双重名称。警报也会在那时显示“JohnJohn”。

.split那么,只有在字符串中有空格的情况下,我才能调用代码?还是有另一种更适合我目的的解决方案?任何帮助将不胜感激。

谢谢。

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

4

3 回答 3

1

您正在使用 class = vName 的所有元素中的文本值。该类有两个元素,因此您正在使用它们的值的串联。所以:“约翰·约翰·史密斯”并且有错误。

于 2013-05-01T06:27:52.190 回答
1

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

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

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

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

于 2013-05-01T05:00:45.083 回答
1

这个简单的(纯 javascript)跨浏览器行调用“仅当字符串中有空格时 .split 代码”(如您所问):

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

或者:

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

它是一个三元 if 语句(语法:)(test) ? true : false;,其中test返回true或在测试正则表达式(一个空格)上false引用的字符串时。此处为 jsfiddle 示例。designerName/ /

于 2013-05-01T05:29:28.610 回答