如果字符串中只有一个单词或没有空格,则使用jQuery/Javascript发出拆分字符串的命令
我使用如果字符串中只有一个单词或没有空格,则使用jQuery/Javascript发出拆分字符串的命令,javascript,jquery,Javascript,Jquery,我使用.split从通常有名字和姓氏的字符串中只提取名字。只要字符串中有一个空格(即名字和姓氏),这种方法就非常有效,但是当只有一个名字时,整个字符串就会加倍 例如: 我有一个字符串,其中包含名称“John Smith”。当我使用下面的代码时,它返回“John”。伟大的但是如果字符串只是“John”,并且使用了代码,则返回“JohnJohn”。不 有了这一行,js将返回“John” <p>Name: <span class="vName">John Smith</s
.split
从通常有名字和姓氏的字符串中只提取名字。只要字符串中有一个空格(即名字和姓氏),这种方法就非常有效,但是当只有一个名字时,整个字符串就会加倍
例如:
我有一个字符串,其中包含名称“John Smith”。当我使用下面的代码时,它返回“John”。伟大的但是如果字符串只是“John”,并且使用了代码,则返回“JohnJohn”。不
有了这一行,js将返回“John”
<p>Name: <span class="vName">John Smith</span></p>
无论我使用三个.split行中的哪一行,如果原始designerName字符串没有姓氏=空格,我仍然会得到双名。此时警报也会显示“JohnJohn”
那么,仅当字符串中有空格时,如何调用.split
代码?还是有其他更适合我的解决方案?任何帮助都将不胜感激
谢谢
已解决:html中有一个额外的.vName实例。已删除,现在可以正常工作。感谢Francisco Afonso的建议,这就是问题所在。使用
indexOf
或其他一些函数,首先检查字符串中是否存在空格。检查是否所有浏览器都支持它,因为indexOf可能不适用于IE8或更低版本
if (myvar.indexOf(' ') !== -1) {
myvar = myvar.split(' ')[0];
} else {
//No space so ignore...
}
这不是jQuery,也不一定是。jQuery是一个很好的框架,我建议大多数项目使用它,但只要有可能,就尝试使用原生JavaScript。它通常更快,您可以了解更多关于jQuery背后的语言
如果确实要使用jQuery,可能需要尝试
$.inArray()
检查拆分是否有效。使用indexOf
或其他一些函数,首先检查字符串中是否存在空格。检查是否所有浏览器都支持它,因为indexOf可能不适用于IE8或更低版本
if (myvar.indexOf(' ') !== -1) {
myvar = myvar.split(' ')[0];
} else {
//No space so ignore...
}
这不是jQuery,也不一定是。jQuery是一个很好的框架,我建议大多数项目使用它,但只要有可能,就尝试使用原生JavaScript。它通常更快,您可以了解更多关于jQuery背后的语言
如果您确实想使用jQuery,您可能需要尝试$.inArray()
检查拆分是否有效。这个简单(纯javascript)跨浏览器行调用“仅当字符串中有空格时才调用.split代码”(如您所问):
或:
它是一个三元if语句(语法:(test)?true:false;
),其中test
在regex/
(一个空格)上测试designerName
引用的字符串时返回true
或false
。示例。这个简单的(纯javascript)跨浏览器行调用“仅当字符串中有空格时才调用.split代码”(如您所问): 或: 它是一个三元if语句(语法:
(test)?true:false;
),其中test
在regex/
(一个空格)上测试designerName
引用的字符串时返回true
或false
。示例。您正在使用class=vName的所有元素的文本值。 该类中有两个元素,因此使用它们的值的串联。 所以:“约翰·史密斯”
还有一个bug。您正在使用class=vName的所有元素的文本值。 该类中有两个元素,因此使用它们的值的串联。 所以:“约翰·史密斯”
还有一个bug。
“John”。split(“”[0]
仍然是“John”
。您使用的是哪个版本的jquery?目前正在使用jquery v1.8。2@xdazz如果示例中的designerName为“John”,则“.split”返回“JohnJohn”@aethergy这不会发生。“John”。split(“”[0]
仍然是“John”
。您使用的是哪个版本的jquery?目前正在使用jquery v1.8。2@xdazz如果示例中的designerName为“John”,则“.split”返回“JohnJohn”@aethergy这不会发生。.indexOf()
不会返回true
或false
,因此这不起作用。它返回一个数字索引或-1
@jfriend00 Oops。我脑子里有另一种语言。修复。@Jared谢谢,我会查出来。String.prototype.indexOf()
在IE8中受支持。您可能将其与Array.prototype.indexOf()
.indexOf()
混淆。indexOf()不返回true
或false
,因此这不起作用。它返回一个数字索引或-1
@jfriend00 Oops。我脑子里有另一种语言。修复。@Jared谢谢,我会查出来。String.prototype.indexOf()
在IE8中受支持。您可能将其与Array.prototype.indexOf()
混淆。谢谢!我要试一试,糟糕透了。它们都返回“JohnJohn”。你知道是什么原因造成的吗?所以这把小提琴:仍然会在你的电脑上显示一个带有“JohnJohn”的alertbox(在Win7上使用Chrome 26.0.1410.64 m版)???这是一个非常有趣的错误!不,在我的服务器上的代码中,我唯一得到“JohnJohn”结果的地方。每次使用我的代码和你的代码时,JSFIDLE都能正常工作<代码>。在这种情况下,我们需要更多的代码。我的第一个猜测是函数(?)没有到达代码的那一部分。您可以查看错误控制台来搜索错误。您还可以开始放置一些警报
或控制台。在代码中记录
片段,查看代码什么时候做了什么。我还建议使用jslint(而不是jshint)。祝你调试顺利!谢谢我要试一试,糟糕透了。它们都返回“JohnJohn”。你知道是什么原因造成的吗?所以这把小提琴:仍然会在你的电脑上显示一个带有“JohnJohn”的alertbox(在Win7上使用Chrome 26.0.1410.64 m版)???这是一个非常有趣的错误!不,在我的服务器上的代码中,我唯一得到“JohnJohn”结果的地方。JSFIDLE每天都工作得很好
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"
}
if (myvar.indexOf(' ') !== -1) {
myvar = myvar.split(' ')[0];
} else {
//No space so ignore...
}
if((/ /).test(designerName)){ designerName = designerName.split(" ")[0]; }
designerName = (/ /).test(designerName) ? designerName.split(" ")[0]
: designerName;