有没有更好的方法来编写以下功能?
让'#' + div_id
对我来说看起来不错。
function hide_div(div_id) {
$('#' + div_id).hide();
}
答案 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+'"]')
此查询与[]属性选择器一起使用。 不短,不干净,真的慢,但无论如何都是另类