【发布时间】:2012-03-17 00:37:35
【问题描述】:
我为我们的表单编写了一个小的 JQuery / Javascript 插件,它接受一个全名输入并将其分解为名字和姓氏组件。如果输入中有三个或更多名称,它会打开一个模式并询问哪个组合是正确的。
我的下一步是查找并删除可能已输入的任何后缀,例如 Jr、Sr、III 等。我目前正在删除最后四个字符并使用 indexOf 检查它们是否包含后缀字符串 ( Jr、Sr、III 等)。但是每一行只检查一个可能的后缀,我想知道是否有一些 js 魔法可以检查一行中的多个后缀。我当前的代码如下:
var nameVal = $('#name').val();
var suffix = nameVal.slice(-4);
if (suffix.toLowerCase().indexOf(" jr") != -1) {
var nameSplit = nameVal.slice(0, -3).split(" ");
} elseif (suffix.toLowerCase().indexOf(" iii") != -1) {
var nameSplit = nameVal.slice(0, -4).split(" ");
} else {
var nameSplit = nameVal.split(" "); }
我总能做好老人||并继续添加具有不同 indexOf 值的额外 (suffix.toLowerCase().indexOf("jr") != -1),但我希望尽可能保持代码更紧凑,我的“小”脚本已经 3k。
一旦我得到这个排序,最后一步将弄清楚如何保留姓氏值,以便在输入其他名称并再次调用脚本时进一步向下查看是否选择了姓氏匹配新条目并绕过模态弹出窗口。
【问题讨论】:
-
在这样的块内定义变量时,您将得到非常意想不到的结果。了解有关范围和提升的更多信息here
-
@jbabey:很难进入有问题的情况,除非您在代码中声明变量之前使用它们。此外,大多数人使用
for (var i=0; i < len; i++)定义他们的循环。提升不是这里的问题,为了清楚起见,var nameSplit应该在if声明的上方
标签: javascript jquery string indexof