【问题标题】:How do i toggle between classes of an element using javascript? [duplicate]如何使用 javascript 在元素的类之间切换? [复制]
【发布时间】:2013-05-02 20:47:10
【问题描述】:

我正在尝试制作一个脚本,当我单击一次复选框时,它会为复选框的标签设置一个类,当我再次单击它时,它会恢复为第一个类。

这是我的代码:

    <label for="img1">
    <img class="img1" src="Images/testimg.jpg" onclick="javascript:test()" id="t1" />
    </label>

    <input type="checkbox" class="chk " id="img1" name="img1" value="1" />

我希望测试函数在调用它时分配类 img2,当我再次调用它时分配类 img1。

【问题讨论】:

  • 您需要替换当前的类(一项微不足道的任务)还是添加一个新的类(不难,但需要辅助函数)?
  • 为了您的娱乐,Stack Overflow 经典:Not enough jQuery.
  • 也许你可以使用这个:document.getElementById("MyElement").classList.toggle('MyClass');

标签: javascript html


【解决方案1】:

JavaScript

function toggleClass(element, origin, target) {
    var newClass = element.className.split(" ");
    for (var i = 0, i < newClass.length; i++) {
        if (origin.localeCompare(newClass[i]) == 0) {
            newClass[i] = target;
        };
    };
    element.className = newClass.join(" ");
};
// Usage
var img = document.getElementById("img1");
toggleClass(img, "img1 img2");

jQuery

$("#img1").toggleClass("img1 img2");

更多here.

【讨论】:

  • 他说的是javascript,不是jquery
  • 你不是说.toggleClass("img1 img2");吗?
  • @RocketHazmat 很好。@alex23:相应地更新您的问题:api.jquery.com/toggleClass/#toggleClass-classNameOne or more class names (separated by spaces)...
【解决方案2】:
function test() {
    t1.className = t1.className == 'img1' ? 'img2' : 'img1';
}

相关:Change an element's class with JavaScript

【讨论】:

  • 我想这没关系,t1.className = t1.className == t1.className.indexOf('img1') &gt; -1 ? t1.className.replace('img1','img2') : t1.className.replace('img2','img1')';
  • 那也行不通。如果你有 'img10' 作为类名,那么在交换之后你最终会得到 'img20',这不是你想要的。
  • 我会说 duplicate 而不是 related
  • @alex23,除非另有说明,否则假定为单个分类的 dom 元素。我亲自拉战车是因为我想这样做,而不仅仅是因为胡萝卜。
  • @XaviLópez,对,取决于你早上的心情:D
【解决方案3】:

如果你不使用 jQuery,我会建议你两件事:

  1. 使用onclick 属性,您无需在调用函数之前设置javascript:。用了就不行了。
  2. 您可以像这样通过函数发送元素:onclick=test(this)。现在你只需要比较他的班级。
function testFunction(element) {
    if (element.className === 'img1') {
        element.className = 'img2';
    } else {
        element.className = 'img1';
    }
}

小心如果您使用多类,因为您需要将它们添加到类名中。此函数将删除新类的完整类名。

【讨论】:

    【解决方案4】:

    您可以使用 JQuery 的 toggleClass 方法:

    function toggler() {
        $('#t1').toggleClass('img2 img1')
    
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    相关资源
    最近更新 更多