【问题标题】:is there an alternative to '#' + div_id?'#' + div_id 有替代方案吗?
【发布时间】:2012-06-15 07:22:05
【问题描述】:

下面的函数有没有更好的写法?

'#' + div_id 在我看来是错误的。

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

【问题讨论】:

  • 告诉我们你是怎么打电话给hide_div()的,目前,这是唯一的方法:s
  • @SiGanteng 这个函数只是为了理论目的,所以你明白我想知道什么
  • 这个函数没什么意义,为什么不直接调用$("#footer").hide()呢?
  • @Esailija,这不是我想做的,我遇到过几次,上面的代码只是一个例子
  • @Esailija 这可能只是更大函数的一部分,但函数体的其余部分与问题无关。

标签: javascript jquery coding-style


【解决方案1】:

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

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

你也可以传入完全限定的选择器,像这样:

hide_div("#divId");

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

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

【讨论】:

  • 请注意,.show()/.hide() 知道元素中的初始 display。因此,当您在.hide()d 表上.show() 时,它将再次变为"display:table;"。所以香草 javascript 仅在某些情况下是等效的。
  • 我很欣赏有很多方法可以做到这一点。虽然在原型中你可以使用$('footer'),但我的问题是 jQuery 中是否存在类似的东西。我知道其他人也对此感到疑惑。我认为这将是一个不错的 jQuery 功能
  • @Filype: "footer" 会给你所有footer-elements 而"#footer" id 为footer 的元素。原型的工作方式相同。
  • 页脚可能是一个不好的例子,我的意思是原型与$('myDiv')
【解决方案2】:

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

【讨论】:

  • 如果是为了这个,你可以写function i(id) { return '#'.concat( id ); },但我想你的方法更有效:-)
  • 是的,它看起来不错,我不会费心写一个函数来处理它。
  • 函数可以简化为return document.getElementById(id)
  • 如果元素不存在,我不想返回 null 或某种错误。此外,重点是使用的简洁性,而不是功能本身的简洁性。
  • 呃,如果元素不存在,你宁愿发送一个空字符串?那里有问题。
【解决方案3】:

几种替代方式:

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

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

另外,@Thomas 启发了我这个替代解决方案:

当你调用你的函数时,使用:

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

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

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

【讨论】:

  • ...这有什么改进?
  • @PeterOlson 不是改进,只是另一种方式:-)
【解决方案4】:
function hide_div(div_id) {
    $(div_id).hide();
}

...在哪里...

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

【讨论】:

    【解决方案5】:

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

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

    【讨论】:

      【解决方案6】:

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

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

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

      【讨论】:

      • 我知道,但他要求另一种选择!
      猜你喜欢
      • 2012-05-29
      • 2021-12-03
      • 2019-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-24
      • 2018-02-26
      相关资源
      最近更新 更多