使用已经设置的id的更优雅方式是什么?jQuery("#"+ t)?

Fra*_*sco 1 jquery

我有点像javascript的新手,即使我建立了很多工作网站和应用程序..

btu我觉得天真的方式,我曾经把变量id传递给jquery ..例如,当我不得不使用一些旧的代码时,我曾经这样做过去.让我们假设我的所有网站都已用'a编码'这样的标签

<a id='myId' onclick='doSome(this.id)' > link </a>
Run Code Online (Sandbox Code Playgroud)

然后在JS中

function doSome(id){

//old code removed and replaced by jquery
    jQuery("#"+ id).show();

}
Run Code Online (Sandbox Code Playgroud)

并且这种功能完美无瑕......

所以,再次假设我不能改变除函数内部代码以外的任何东西,使用变量id的最佳方法是什么?因为据我所知,我是否只使用过

jQuery(id).show();
Run Code Online (Sandbox Code Playgroud)

代替

jQuery("#"+ id).show();
Run Code Online (Sandbox Code Playgroud)

它不会工作......对吗?

bob*_*nce 6

jQuery的(ID).show();

确实不起作用,因为jQuery/ $function 的参数是一个选择器,而不是一个ID.

'#'+id作为选择器工作,但只有在其中的字符id有效用于选择器并且不需要转义时.

在HTML4/XHTML1中,只有字母数字加号.:-_在ID中有效,因此您只需担心.:.如果你没有'#'+id在那里ida.b你实际上可以选择具有ID的元素a和类b.在HTML5中,更多的字符在ID中有效,因此粗略地附加id #甚至更不可靠.

使用普通的旧DOM而不是选择器更少jQuery-ish,但它更安全且(更简单)更快:

$(document.getElementById(id))
Run Code Online (Sandbox Code Playgroud)

在任何情况下,id当你已经有权访问该元素时,依赖于选择一个元素是愚蠢的:document.getElementById(this.id)显然将是相同的this.

如果你可以改变标记,你最好只是传递this给函数,那么你可能会失去选择器/ getElementById,如果你不需要它,你也可能失去id属性.更好的是,完全避免内联事件处理程序属性并从脚本中分配事件处理程序,例如使用jQuery $('#myId').click(function() { ... });; 在函数内部,this将是有问题的元素.

虽然我不太明白代码应该做什么... show()但是myIdonclick myId似乎有点多余,因为它必须已经显示,以便你点击它.

  • 用于解释''#'+ id`何时失败的+1. (2认同)

Roh*_*rbs 5

通过this.id,而不是通过this

然后你可以调用这个函数:

$(id).show();
Run Code Online (Sandbox Code Playgroud)