我正在使用.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提出这个问题。
答案 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
引用的字符串时返回false
或designerName
正则表达式/ /
(一个空格)
示例jsfiddle here。
答案 2 :(得分:1)
您正在使用class = vName从所有元素中使用文本值。 您有两个元素与该类,因此您正在使用它们的值的串联。 所以:“JohnJohn Smith” 还有错误。