我正在尝试使用类nav的后代(.nav a)中所有锚点中的相应unicode字符替换所有内容,具体取决于它是什么。
但是这个javascript / jQuery似乎没有做任何事情。
没有显示任何错误,只是没有发生任何事情。
我做错了什么?如何用javascript / jQuery替换某些文本和其他特定文本?
以下是代码:
$(document).ready(function(){
var navigationLinks = $('.nav a');
for(var i=0; i < navigationLinks.length; i++){
var thisLink = navigationLinks.eq(i);
switch(thisLink.html()){
case "About":
thisLink.html().replace(/About/g,'');
case "Work":
thisLink.html().replace(/Work/g,'');
case "CV":
thisLink.html().replace(/CV/g,'');
case "Resume":
thisLink.html().replace(/Resume/g,'');
case "down":
thisLink.html().replace(/down/g,'');
case "Mail":
thisLink.html().replace(/Mail/g,'');
case "Dribbble":
thisLink.html().replace(/Dribbble/g,'');
case "GooglePlus":
thisLink.html().replace(/GooglePlus/g,'');
case "Facebook":
thisLink.html().replace(/Facebook/g,'');
case "Twitter":
thisLink.html().replace(/Twitter/g,'');
default:
thisLink.html().replace(thisLink.html(),thisLink.html());
}
}
});
这是我尝试过的代码的实例,但它不起作用。 .nav类中锚点内的文本仍然是原始文本而不是unicodes:https://dl.dropboxusercontent.com/u/270523/help/replace/index.html
答案 0 :(得分:2)
html()
获取 innerHTML
,而html("string")
设置 innerHTML
。你必须重新设置值;你不能只在字符串上调用replace
。
例如,您可以重做case
语句以遵循此约定:
var myHtml = thisLink.html();
switch (myHtml) {
case "About":
thisLink.html(myHtml.replace(/About/g, ''));
break;
或将其用于.html()
电话:
thisLink.html(function (i, oldVal) {
return oldVal.replace(/About/g, '');
});
此外,您需要为每个break
添加case
,以防止下一个块执行。
此外,循环匹配元素的jQuery方法是.each()
,而不是for循环(尽管仍然非常有效)。如下所示:
$('.nav a').each(function () {
var thisLink = $(this);
var myHtml = thisLink.html();
// The rest of the code...
});
答案 1 :(得分:2)
演示: http://jsfiddle.net/7hKTs/
请注意,您可以更简洁地执行此操作,但我希望保留原始结构,以便您可以看到我在上下文中所做的更正。
switch
声明中添加了中断。replace()
之后添加了正确的html分配。 html()
是一种方法;你需要用它的返回值做一些事情(比如把它分配给一个变量)。 示例1: thisLink.html().replace(/About/g,'');
。这会获取链接的HTML,在其上调用replace()
,但replace()
的返回值未使用。这不会产生预期的效果。
示例2: thisLink.html(thisLink.html().replace(/About/g,''));
现在,将修改后的HTML传递给html()
方法。在这一行中,它通过使用和不使用参数调用html()
来获取和来设置HTML。
示例3:但是,示例#2在多次使用时非常冗长/重复,因此我们可以做一些更简单的事情:
// get the value
var html = thisLink.html();
// handle any number of cases here
// note the assignment of the return value of html()
html = html.replace(/About/g, '');
// set the value
thisLink.html(html);
另请参阅:http://api.jquery.com/html/
完整示例
$(document).ready(function () {
var navigationLinks = $('.nav a');
for (var i = 0; i < navigationLinks.length; i++) {
var thisLink = navigationLinks.eq(i);
var html = thisLink.html();
switch (html) {
case "About":
html = html.replace(/About/g, '');
break;
case "Work":
html = html.replace(/Work/g, '');
break;
case "CV":
html = html.replace(/CV/g, '');
break;
case "Resume":
html = html.replace(/Resume/g, '');
break;
case "down":
html = html.replace(/down/g, '');
break;
case "Mail":
html = html.replace(/Mail/g, '');
break;
case "Dribbble":
html = html.replace(/Dribbble/g, '');
break;
case "GooglePlus":
html = html.replace(/GooglePlus/g, '');
break;
case "Facebook":
html = html.replace(/Facebook/g, '');
break;
case "Twitter":
html = html.replace(/Twitter/g, '');
break;
}
thisLink.html(html);
}
});
演示: http://jsfiddle.net/7hKTs/5/
我更喜欢这种方法,因为它几乎完全取出了标记。相反,我们使用data-*
属性来存储备用HTML字符串。
<强> HTML 强>
<nav class="nav">
<ul>
<li><a href="#" data-alt="">About</a></li>
<li><a href="#" data-alt="">Work</a></li>
<li><a href="#" data-alt="">CV</a></li>
<!-- etc -->
</ul>
</nav>
<强>的JavaScript 强>
$(document).ready(function () {
$('.nav a').each(function () {
var obj = $(this);
obj.html(obj.data("alt"));
});
});
答案 2 :(得分:1)
鉴于switch
/ case
已使用完全匹配,全局RegExp和replace
实际上正在重复工作:
switch(thisLink.html()){
case "About":
thisLink.html('');
break;
case "Work":
thisLink.html('');
break;
// etc.
}
答案 3 :(得分:1)
我相信使用替换地图并使用.each()
迭代每个锚点会容易得多:
$(document).ready(function() {
var navigationLinks = $('.nav a'),
replacements = {
"About": '',
"Work": '',
"CV": '',
"Resume": '',
"down": '',
"Mail": '',
"Dribbble": '',
"GooglePlus": '',
"Facebook": '',
"Twitter": ''
};
navigationLinks.each(function() {
var $this = $(this),
txt = replacements[$this.text()];
if (txt) {
$this.text(txt);
}
});
});
答案 4 :(得分:0)
我想我也会花2美分。与其他人提到的概念相同。此示例使用map和jquery的$ .each函数。
var hashMap = { 'About' : '', 'Work' : '', 'CV' : '' }
$.each($('.nav a'), function(index, value) {
var x = $(value).html();
$(value).html(hashMap[x]);
} );