jQuery - 如果选择器存在添加属性和前缀值

时间:2014-01-28 21:23:28

标签: jquery

我无法找到解决这个问题的最佳方法。我有条件设置cookie 基于是否存在选择器。在代码中还有其他地方我会做类似的事情 选择器存在。如果选择器存在,我要么添加“nba”或“nba-”(注意破折号) 页面上的属性。我正在尝试删除尽可能多的代码,因为还有其他五个地方 我有类似的地方,我正在添加其他属性。我也觉得有更好的方法 接近这一点而不必写很多次:

if($(".userLocation").length > 0){

我正在敲打着如何压缩这个,但无法弄清楚这一点。请包含代码示例 我这样学得最好。

    if($(".userLocation").length > 0){
        var user_cookie = {
        name: 'nba-user-profile',
        options: {
            path: '/',
            expires: 365
        }
        };
    } else {
        var user_cookie = {
        name: 'user-profile',
        options: {
            path: '/',
            expires: 365
        }
        };
    }

if($(".userLocation").length > 0){
$('header').attr("href","#nba-city");
$('header').attr("href","#nba-state");
} else {
$('header').attr("href","#city");
$('header').attr("href","#state");
}

if($(".userLocation").length > 0){
$('header').attr("title","#nbacity");
$('header').attr("title","#nbastate");
} else {
$('header').attr("title","#city");
$('header').attr("title","#state");
}

2 个答案:

答案 0 :(得分:2)

可能效率不高,但您可以尝试类似

的内容
function existThenDo(selector, successCallBack, failCallback){
    if($(selector).length){
        successCallBack();
    } else {
        failCallback();
    }
}

用法

existThenDo(".userLocation", function(){
    $('header').attr("title","#nbacity");
    $('header').attr("title","#nbastate");
}, function(){
    $('header').attr("title","#city");
    $('header').attr("title","#state");
});

答案 1 :(得分:1)

这样的事情怎么样?创建前缀变量。如果选择器存在,请将其设置为前缀值,否则将其保留为空。然后只需附加任何内容:

var prefix = '';


if($(".userLocation").length > 0)
    prefix = 'nba-';

var user_cookie = {
    name: prefix + 'user-profile',
    options: {
        path: '/',
        expires: 365
    }
};

$('header').attr("href","#" + prefix + "city");
$('header').attr("href","#" + prefix + "state");

由于您不必在if / else块中重复相同的操作,因此将必要的代码减少了一半。