2012-09-09 55 views
1
var searchp = $('body'), 
    searchval = searchp.html(), 
    name  = ['Abraham Lincoln', 'George Washington']; 
    cname  = name.toLowerCase().replace(/ /g, ''), 
    restr  = searchval.split(name).join('<a href="#" data-name="'+cname+'">'+name+'</a>'); 

searchp.html(replacestr); 

我需要一些帮助,使用litte替换函数。它工作正常,如果我使用名称='字符串名称',但我不能让它与数组一起工作。 希望你能帮助我。jQuery替换,使用阵列

+0

分流/连接技术,以取代所有的出现只适用于一个字符串。如果你想使用数组,你必须循环。 – pimvdb

+0

仅供参考,在'cname'和'restr'全局变量的数组之后有';'。我更喜欢在每行(在'var'下面)使用前导逗号而不是尾随逗号,以便清楚地表明所有逗号都存在。 –

回答

1

您尝试在没有提供toLowerCase()方法的Array上调用toLowerCase()。相反,你应该指定数组一个物品:

cname  = name[0].toLowerCase().replace(/ /g, ''), 

这很容易被发现的,你打开浏览器的控制台,在Chrome中运行它给了我这个消息:

Uncaught TypeError: Object Abraham Lincoln,George Washington has no method 'toLowerCase'

正如评论在你的问题上表明你可能不想硬编码元素的索引,而是使用循环。我试着摆弄你的代码,但它似乎从#body一些输入丢失得到一些语义在你的线条,因此所有我可以提供一个建议,如何循环srings数组:

var name = ['Abraham Lincoln', 'George Washington']; 
$(name).each(function(key, value){ 
    console.log(value.toLowerCase()); 
}); 

​ 
+0

非常感谢。 我知道它的工作原理,但是我在每个函数中放置了replacestr变量,所以它被第二个数组项所覆盖。 除此之外,它的工作。 我也改变了这个: var replacestr = searchval.replace(regexname,''+name+''); –