有'#'+ div_id的替代品吗?

时间:2012-06-15 07:22:05

标签: javascript jquery coding-style

有没有更好的方法来编写以下功能?

'#' + div_id对我来说看起来不错。

function hide_div(div_id) {
    $('#' + div_id).hide();
}

6 个答案:

答案 0 :(得分:5)

如果你以某种方式反对字符串连接,那么你可以这样做:

$(document.getElementById(div_id)).hide();

您也可以传递完全限定的选择器,如下所示:

hide_div("#divId");

如果你想在vanilla Javascript中这样做,你可以这样做:

document.getElementById(div_id).style.display = "none";

答案 1 :(得分:4)

简答:不。稍微长一点的hackish回答:创建一个带有单字母长名称的函数,该函数获取元素的ID并在其上返回一个getElementById,然后将其包装在jQuery $()中,如下所示:

function i(id) {
    if (document.getElementById(id)) return document.getElementById(id);
    else return "";
}

然后:

$(i(id)).doWhatever();

但老实说,想一想:

$("#" + id)
  12345678

$(i(id))
  12345

那是三个字。这值得么?这三个角色对你来说真的很重要吗?你已经通过不使用document.getElementById(id)(27个字符)来节省很多。

答案 2 :(得分:2)

有几种替代方式:

$(['#', div_id].join('')).hide();

$('#'.concat(div_id)).hide();

此外,@ Thomas还启发了我的替代解决方案:

调用函数时,请使用:

$.proxy( hide_div, $('#' + div_id) );

// Then, you can do this:
function hide_div() {
    this.hide();
}

它可以让您更好地重复使用。或者不是。

答案 3 :(得分:0)

function hide_div(div_id) {
    $(div_id).hide();
}

... WHERE ...

div_id = '#someId';
hide_div(div_id);

答案 4 :(得分:0)

根据用例,您可以传递对象而不是id:

$('#someobject').click(function(){
    hideDiv(this);
});

答案 5 :(得分:-5)

不,你不能缩短它。 #+ div_id的替代方案是:

$('[id="'+div_id+'"]')

此查询与[]属性选择器一起使用。 不短,不干净,真的慢,但无论如何都是另类