6

有没有更好的方法来编写以下函数?

对我来说,'#' + div_id只是看起来不对。

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

6 回答 6

5

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

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

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

hide_div("#divId");

如果你想用 vanilla Javascript 来做,你可以这样做:

document.getElementById(div_id).style.display = "none";
于 2012-06-15T07:28:49.340 回答
4

简短的回答:没有。稍微长一点的答案:创建一个带有一个字母长名称的函数,该函数采用元素的 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 个字符),您已经节省了很多。

于 2012-06-15T07:31:46.480 回答
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();
}

它可以让您更好地重用。或不。

于 2012-06-15T07:30:48.973 回答
0
function hide_div(div_id) {
    $(div_id).hide();
}

...在哪里...

div_id = '#someId';
hide_div(div_id);
于 2012-06-15T07:28:18.407 回答
0

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

$('#someobject').click(function(){
    hideDiv(this);
});
于 2012-06-15T07:40:28.057 回答
-5

不,你不能把它缩短得更多。# + div_id 的替代方法是:

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

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

于 2012-06-15T07:34:09.080 回答