纯 JavaScript 相当于 jQuery click()?

发布于 2024-07-28 23:26:34 字数 456 浏览 5 评论 0原文

我正在构建一个捕获鼠标点击的小应用程序。 我用 jQuery 编写了原型,但是,由于它是一个专注于速度的小型应用程序,因此嵌入 jQuery 来仅使用一个函数将是一种矫枉过正。

我尝试改编 JavaScriptKit 中的示例:

document.getElementById("alphanumeric").onkeypress=function(e){  
    //blah..blah..blah..  
}

但当我尝试时它不起作用这:

document.getElementsByTagName("x").onclick

我做错了什么?

I am building a small app which captures mouse clicks. I wrote the prototype in jQuery but, since it is a small app focusing on speed, embedding jQuery to use just one function would be an overkill.

I tried to adapt this example from JavaScriptKit:

document.getElementById("alphanumeric").onkeypress=function(e){  
    //blah..blah..blah..  
}

but it didn't work when I tried this:

document.getElementsByTagName("x").onclick

What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

戏蝶舞 2024-08-04 23:26:35

假设您有一个 p 标签列表,您希望捕获

标签的点击:

var p = document.getElementsByTagName("p"); 
for (var i = 0; i < p.length; i++) { 
    p[i].onclick = function() { 
        alert("p is clicked and the id is " + this.id); 
    } 
}

请查看此处的示例以更清楚地了解:
http://jsbin.com/onaci/

Say you have a list of p tags you would like to capture the click for the <p> tag:

var p = document.getElementsByTagName("p"); 
for (var i = 0; i < p.length; i++) { 
    p[i].onclick = function() { 
        alert("p is clicked and the id is " + this.id); 
    } 
}

Check out an example here for more clarity:
http://jsbin.com/onaci/

流殇 2024-08-04 23:26:35

在您的示例中,您使用 getElementsByTagName()方法,它返回 DOM 元素的数组。 您可以迭代该数组并将 onclick 处理程序分配给每个元素,例如:

var clickHandler = function() {
    alert('clicked!');
}

var elements = document.getElementsByTagName('div'); // All divs

for (var i = 0; i < elements.length; i++) {
    elements[i].onclick = clickHandler;
}

In your example you are using getElementsByTagName() method, which returns you an array of DOM elements. You could iterate that array and assign the onclick handler to each element, for example:

var clickHandler = function() {
    alert('clicked!');
}

var elements = document.getElementsByTagName('div'); // All divs

for (var i = 0; i < elements.length; i++) {
    elements[i].onclick = clickHandler;
}
堇色安年 2024-08-04 23:26:35

看起来你错过的不仅仅是 jQuery 的点击功能。 您还会怀念 jquery 的选择器引擎、链接和跨对象集合的自动迭代。 只要付出更多的努力,您也可以最小限度地重现其中的一些内容。

var myClickCapture = function (selector) {
    var method, name,iterator;
    if(selector.substr(0,1) === "#") {
       method = "getElementById";
       name = selector.substr(1);
       iterator = function(fn) { fn(document[method](name));  };
    } else {
       method = "getElementsByTagName";
       name = selector;
       iterator = function(fn) { 
          var i,c = document[method](name);
          for(i=0;i<c.length;i++){
             fn(c[i]);
       };
    };
    myClickCapture.click = function (fn){
         iterator(function(e){
            e.onclick=fn;
         })
    } 

    return myClickCapture;

}

我还没有测试过这些代码,但从理论上讲,它会给你带来这样的结果:

myClickCapture("x").click(function(e){ alert("element clicked") });

希望这能让你了解 jquery 在幕后所做的事情。

it looks a little bit like you miss more than just the click function of jQuery. You also miss jquery's selector engine, chaining, and automatic iteration across collections of objects. With a bit more effort you can minimally reproduce some of those things as well.

var myClickCapture = function (selector) {
    var method, name,iterator;
    if(selector.substr(0,1) === "#") {
       method = "getElementById";
       name = selector.substr(1);
       iterator = function(fn) { fn(document[method](name));  };
    } else {
       method = "getElementsByTagName";
       name = selector;
       iterator = function(fn) { 
          var i,c = document[method](name);
          for(i=0;i<c.length;i++){
             fn(c[i]);
       };
    };
    myClickCapture.click = function (fn){
         iterator(function(e){
            e.onclick=fn;
         })
    } 

    return myClickCapture;

}

I haven't tested the code, but in theory, it gets you something like this:

myClickCapture("x").click(function(e){ alert("element clicked") });

Hopefully this gives you a sense of the sorts of things jquery is doing under the covers.

绮烟 2024-08-04 23:26:35
document.getElementsByTagName("x")

返回具有标记名“x”的元素数组。

您必须为返回数组中的每个元素设置正确的事件。

document.getElementsByTagName("x")

returns an array of elements having the tagname 'x'.

You have to right event for each element in the returned array.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文