1

所以我想替换一个页面上的 3 个 css 文件,在某些页面上可能有第 4 个文件......在阅读之后,我有这个:

$("link").each(function(index) {
switch (index) {
    case 1: $this.attr("href","css1.css");
            break;
    case 2: $this.attr("href","css2.css");
            break;
    case 3: $this.attr("href","css3.css");
            break;
    case 4: $this.attr("href","css4.css");
            break;  
}
});

不幸的是,这不起作用。我觉得我用错了“这个”,但我真的不知道。

4

3 回答 3

3

您缺少对jQuery 对象元素的$this引用$(this)

$("link").each(function(index) {

    var $this = $(this); // dyadaaa!

    switch (index) {
        case 0: $this.attr("href","css1.css");
                break;
        case 1: $this.attr("href","css2.css");
                break;
        case 2: $this.attr("href","css3.css");
                break;
        case 3: $this.attr("href","css4.css");
                break;  
    }

});

.each()方法将参数索引作为zeroElements Array 集合中的基础值,因此您也可以从0


只是为了分享一个秘密;)你可以这样做:

var links = ['css1.css', 'css2.css', 'css3.css', 'css4.css'];
$('link').each(function( i ){
   $(this).attr("href", links[i]);
});

或者(如果你的样式表真的是这样命名的)就像:

$('link').each(function( i ){
   $(this).attr("href", "css"+ (i+1) +".css");
});

...在逻辑上(i+1)而不是0,1,2,3 将返回1,2,3,4

于 2013-05-09T03:24:58.177 回答
1

不,您正在寻找一个 jquery 包装器,那么您需要这样做$(this)。但是在这里您可以直接分配给 dom 元素,例如this.href="css1.css". 索引也是从零开始的。所以可能你需要处理案例 0。

$("link").each(function(index) {
var $this = $(this);
switch (index) {
     case 1: $this.attr("href","css1.css");
        break;
case 2: $this.attr("href","css2.css");
        break;
case 3: $this.attr("href","css3.css");
        break;
 case 4: $this.attr("href","css4.css");
        break;  
}
});

您可以将其写为 ,因为this这里指的是 DOM 元素本身,并且 href 可以作为属性访问。

$("link").each(function(index) {

switch (index) {
case 0: ??// Something here?
case 1: this.href ="css1.css";
        break;
case 2: this.href="css2.css";
        break;
case 3: this.href="css3.css";
        break;
 case 4: this.href="css4.css";
        break;  
}
});
于 2013-05-09T03:24:57.123 回答
1

尝试使用 $(this) 而不是 $this

于 2013-05-09T03:25:40.640 回答