javascript - 使用没有 jQuery 的 javascript 调用当前元素

标签 javascript

首先,我对我的英语不好感到抱歉:) 我这里有一些代码:

<style>
    .active circle {fill:red;}
    .deactive circle {fill:black;}
</style>
<form>
    <input type="button" id="btn" value="btn1"/>
    <svg class="deactive">
        <circle cx="10" cy="10" r="10"/>
    </svg>
<input type="button" id="btn" value="btn2"/>
    <svg class="a">
        <circle cx="10" cy="10" r="10"/>
    </svg>
</form>

我想更改圆圈类,用 javascript 单击按钮,而不是使用 jQuery。 例如:我单击第一个按钮,第一个圆圈会将类别更改为“事件”,第二个圆圈类别将更改为“非事件”。 如果我单击第二个按钮,第一个圆类将替换为“非事件”,第二个圆类将替换为“事件”

谢谢。

最佳答案

尽管有可能,但不推荐多次使用 id ( HTML id Attribute ),因为它必须引用 body 中的唯一元素。

除此之外,使用纯原生 javascript 而不是 jQuery 会涉及更多代码,请参阅跨浏览器、DOM 遍历等。

无论如何,如果有帮助的话,您可以看看这个起点:

<input type="button" id="btn1" value="btn1"/>
<svg class="deactive">
    <circle cx="10" cy="10" r="10"/>
</svg>
<input type="button" id="btn2" value="btn2"/>
<svg class="a">
    <circle cx="10" cy="10" r="10"/>
</svg>

<script>
    function changeClass(e)
    {
        var btns = document.getElementsByTagName('input');
        var btnsLength = btns.length;

        for( var i = 0; i < btnsLength; i++)
        {
            btns[i].nextElementSibling.setAttribute("class", "deactive");
        }

        e.target.nextElementSibling.setAttribute("class", "active");
    }

    document.getElementById('btn1').addEventListener('click', changeClass, false);
    document.getElementById('btn2').addEventListener('click', changeClass, false);  
</script>

基本上我只是为每个按钮定义了一个处理程序。

document.getElementById('btn1').addEventListener('click',changeClass, false);

这会调用函数changeClass

在此函数内,我循环访问每个按钮并设置其 nextElementSibling 的类 deactive

最后,我在函数 changeClass 中设置了单击元素的事件类,作为引用传递 e

----------替代起点------------

另一种探索方式可能是这样的:

function setElActive(el, event)
{
    document.getElementById(el).addEventListener('click', function(e)
    {
        var btns = document.getElementsByTagName('input');
        var btnsLength = btns.length;

        for( var i = 0; i < btnsLength; i++)
        {
            btns[i].nextElementSibling.setAttribute("class", "deactive");
        }

        e.target.nextElementSibling.setAttribute("class", "active");
    }, false);

}

setElActive('btn1', 'click');
setElActive('btn2', 'click');

关于javascript - 使用没有 jQuery 的 javascript 调用当前元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20581912/

相关文章:

javascript 通过函数传递参数并使用 '=' 进行归因

javascript - Gridpanel 没有在 Ext js 4.0.7 的视口(viewport)内显示我的代码有什么问题

javascript - 使用正则表达式 JS 验证密码是否为字母数字

javascript - 如何使变量 "Counter"计算随机创建并通过单击消失的 "div' s 的数量

javascript - 允许 Javascript 模块(类)与 CommonJS、AMD 或两者都不一起使用

javascript - Shield UI 日期选择器,将所选值格式化为 dd/MM/yyyy

javascript - 我找不到一种优雅的方法将数据库源添加到 dgrid

javascript - jquery解除绑定(bind)后重新绑定(bind)点击

javascript - 更改 openlayers map 颜色(深色和浅色样式)

javascript - apollo-link-rest 设置 header