有没有更好的方法来编写以下函数?
对我来说,'#' + div_id
只是看起来不对。
function hide_div(div_id) {
$('#' + div_id).hide();
}
有没有更好的方法来编写以下函数?
对我来说,'#' + div_id
只是看起来不对。
function hide_div(div_id) {
$('#' + div_id).hide();
}
如果您以某种方式反对字符串连接,那么您可以这样做:
$(document.getElementById(div_id)).hide();
您还可以传入完全限定的选择器,如下所示:
hide_div("#divId");
如果你想用 vanilla Javascript 来做,你可以这样做:
document.getElementById(div_id).style.display = "none";
简短的回答:没有。稍微长一点的答案:创建一个带有一个字母长名称的函数,该函数采用元素的 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 个字符),您已经节省了很多。
几种替代方式:
$(['#', div_id].join('')).hide();
$('#'.concat(div_id)).hide();
此外,@Thomas 启发了我这个替代解决方案:
当你调用你的函数时,使用:
$.proxy( hide_div, $('#' + div_id) );
// Then, you can do this:
function hide_div() {
this.hide();
}
它可以让您更好地重用。或不。
function hide_div(div_id) {
$(div_id).hide();
}
...在哪里...
div_id = '#someId';
hide_div(div_id);
根据用例,您可以传递对象而不是 id:
$('#someobject').click(function(){
hideDiv(this);
});
不,你不能把它缩短得更多。# + div_id 的替代方法是:
$('[id="'+div_id+'"]')
此查询与 [] 属性选择器一起使用。不是更短,不是更干净,真的很慢,但无论如何都是一种选择