Javascript getElementById的简写

Fox*_*son 89 javascript

是否有JavaScript document.getElementById的简写?或者我有什么方法可以定义一个?而越发重复重复输入超过.

use*_*716 121

var $ = function( id ) { return document.getElementById( id ); };

$( 'someID' )
Run Code Online (Sandbox Code Playgroud)

我在这里使用过$,但你可以使用任何有效的变量名.

var byId = function( id ) { return document.getElementById( id ); };

byId( 'someID' )
Run Code Online (Sandbox Code Playgroud)

  • 如果您从未加载它们,那么有多少库使用`$`没有区别. (43认同)
  • 仅仅为了记录,我曾经做过`var $ = document.getElementById.bind(document)`,但`bind`并不适用于所有浏览器.也许它更快,因为我只使用本机方法.只想添加这个. (7认同)
  • @Piskvor:我从不编码来容纳无知.无知会导致代码损坏.破碎的代码导致研究.研究导致信息.无知是治愈的. (7认同)
  • @patrick dw我喜欢那样.特别是有丰富的有效变量名称:) (6认同)
  • "拥有丰富的有效变量名称" - 你的意思是"至少有两个主要的JS框架已经在使用`$`,恭喜你选择它?" (4认同)
  • @Piskvor不,我可以为该功能选择大量变量. (3认同)
  • @pimvdb [Benchmark](http://jsperf.com/bind-vs-dollar/2) 发现浏览器使用 JIT 优化了内联,因此 `.bind` 速度较慢。 (2认同)

Rob*_*ert 86

要保存额外的字符,您可能会污染String原型,如下所示:

pollutePrototype(String, '?', {
    configurable: false, // others must fail
    get: function() {
        return document.getElementById(this);
    },
    set: function(element) {
        element.id = this;
    }
});

function pollutePrototype(buildIn, name, descr) {
    var oldDescr = Object.getOwnPropertyDescriptor(buildIn.prototype, name);
    if (oldDescr && !oldDescr.configurable) {
        console.error('Unable to replace ' + buildIn.name + '.prototype.' + name + '!');
    } else {
        if (oldDescr) {
            console.warn('Replacing ' + buildIn.name + '.prototype.' + name + ' might cause unexpected behaviour.');
        }
        Object.defineProperty(buildIn.prototype, name, descr);
    }
}
Run Code Online (Sandbox Code Playgroud)

它适用于某些浏览器,您可以通过以下方式访问元素:

document.body.appendChild(
    'footer'.? = document.createElement('div')
);
'footer'.?.textContent = 'btw nice browser :)';
Run Code Online (Sandbox Code Playgroud)

我几乎随机选择了该物业的名称.如果你真的想用这个简写,我会建议你想出一些更容易打字的东西.

  • 绎(Yì) - Unravel(简体中文) (11认同)
  • 你确实意识到这会对效率产生合理的影响.原型上定义的getter/setter慢一个数量级. (8认同)
  • 另外,这可能只是一个_visible_字符,但它在文件中需要多个字节... (5认同)

Sar*_*raz 18

您可以轻松地轻松创建速记:

function getE(id){
   return document.getElementById(id);
}
Run Code Online (Sandbox Code Playgroud)


Pab*_*dez 14

贡献的快速替代方案:

HTMLDocument.prototype.e = document.getElementById
Run Code Online (Sandbox Code Playgroud)

然后就做:

document.e('id');
Run Code Online (Sandbox Code Playgroud)

有一个问题,它不适用于不允许扩展原型的浏览器(例如IE6).

  • @ThiefMaster __"不要做X"__是关于你能给出的最糟糕的建议.了解替代方案,优点和缺点,并为每个特定问题选择最佳答案.在这种情况下扩展原型是没有害处的(虽然我应该说其他答案更合适,但这个只留下来完成) (5认同)
  • @ walle1357:[本文](http://perfectionkills.com/whats-wrong-with-extending-the-dom/)可能会让您感兴趣. (2认同)

Jim*_*inP 8

(简写不仅要按ID获取元素,还要逐个元素获取:P)

我喜欢用的东西

function _(s){
    if(s.charAt(0)=='#')return [document.getElementById(s.slice(1))];
    else if(s.charAt(0)=='.'){
        var b=[],a=document.getElementsByTagName("*");
        for(i=0;i<a.length;i++)if(a[i].className.split(' ').indexOf(s.slice(1))>=0)b.push(a[i]);
        return b;
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:_(".test")返回带有类名的所有元素test,并_("#blah")返回一个带id的元素blah.

  • 你最好为[`document.querySelectorAll`](https://developer.mozilla.org/En/DOM/Document.querySelectorAll)创建一个快捷方式,而不是试图模仿`querySelectorAll`方法的一部分.自定义功能. (6认同)

im_*_*ton 8

id已保存到window.

HTML

 <div id='logo'>logo</div>
Run Code Online (Sandbox Code Playgroud)

JS

logo.innerHTML;
Run Code Online (Sandbox Code Playgroud)

与写作相同:

document.getElementById( 'logo' ).innerHtml;
Run Code Online (Sandbox Code Playgroud)

我不建议使用前一种方法,因为这不是常见的做法.

  • @Okku 因为 `&lt;div id="location"&gt;&lt;/div&gt;` 和调用 `window.location` 将不起作用。 (2认同)

gen*_*sis 6

<script>
var _ = function(eId)
{
    return getElementById(eId);
}
</script>

<script>
var myDiv = _('id');
</script>
Run Code Online (Sandbox Code Playgroud)


Kon*_*Kon 6

这里有几个很好的答案,有几个围绕类似jQuery的语法跳舞,但没有人提到实际使用jQuery.如果你不反对尝试它,请查看jQuery.它让你选择这样的元素非常容易..

按ID:

$('#elementId')
Run Code Online (Sandbox Code Playgroud)

通过CSS类:

$('.className')
Run Code Online (Sandbox Code Playgroud)

按元素类型:

$('a')  // all anchors on page 
$('inputs')  // all inputs on page 
$('p a')  // all anchors within paragaphs on page 
Run Code Online (Sandbox Code Playgroud)

  • @patrick dw,对,你的答案$('someID')看起来不像jQuery ID选择器$('#someID'):) (3认同)
  • 我尝试使用jQuery,但是我真的需要一个完整的库来获取getElementById的简写吗? (2认同)
  • 不,看起来[更像是prototypejs](http://api.prototypejs.org/dom/dollar/).:O) (2认同)

Aln*_*tak 5

没有内置的.

如果您不介意污染全局命名空间,为什么不:

function $e(id) {
    return document.getElementById(id);
}
Run Code Online (Sandbox Code Playgroud)

编辑 - 我将函数名称更改为不寻常的东西,但是而且没有与jQuery或任何使用裸$号的其他任何东西发生冲突.


Gil*_*tel 5

我经常使用:

var byId='getElementById'
var byClass='getElementsByClass'
var byTag='getElementsByTag'


var mydiv=document[byId]('div') 
/* as document["getElementById"] === document.getElementById */
Run Code Online (Sandbox Code Playgroud)

我认为它比外部函数(例如$()byId())更好,因为你可以这样做:

var link=document[byId]('list')[byClass]('li')[0][byTag]('a')[0]
Run Code Online (Sandbox Code Playgroud)


顺便说一句,不要为此使用 jQuery,jQuery 比、 或 等document.getElementById()外部函数或我的方法 慢得多: http://jsperf.com/document-getelementbyid-vs-jquery/5$()byId()