首页 > JavaScript > 如何使用 JavaScript 更改 HTML 元素的类以响应事件或任何其他事件?onclick

如何使用 JavaScript 更改 HTML 元素的类以响应事件或任何其他事件?onclick

上一篇 下一篇

如何使用 JavaScript 更改 HTML 元素的类以响应事件或任何其他事件?onclick
分割线

网友回答:

在我一个不使用jQuery的旧项目中,我构建了以下函数来添加,删除和检查元素是否有类:

function hasClass(ele, cls) {
    return ele.className.match(new RegExp('(\s|^)' + cls + '(\s|$)'));
}

function addClass(ele, cls) {
    if (!hasClass(ele, cls))
        ele.className += " " + cls;
}

function removeClass(ele, cls) {
    if (hasClass(ele, cls)) {
        var reg = new RegExp('(\s|^)' + cls + '(\s|$)');
        ele.className = ele.className.replace(reg, ' ');
    }
}

因此,例如,如果我想向按钮添加一些类,我可以使用它:onclick

<script type="text/javascript">
    function changeClass(btn, cls) {
        if(!hasClass(btn, cls)) {
            addClass(btn, cls);
        }
    }
</script>
...
<button onclick="changeClass(this, "someClass")">My Button</button>

到现在为止,使用jQuery肯定会更好。
分割线

网友回答:

用于更改类的现代 HTML5 技术

现代浏览器添加了classList,它提供了一些方法,可以在不需要库的情况下更轻松地操作类:

document.getElementById("MyElement").classList.add('MyClass');

document.getElementById("MyElement").classList.remove('MyClass');

if ( document.getElementById("MyElement").classList.contains('MyClass') )

document.getElementById("MyElement").classList.toggle('MyClass');

不幸的是,这些在 v10 之前的 Internet Explorer 中不起作用,尽管有一个填充程序可以添加对 IE8 和 IE9 的支持,可从此页面获得。不过,它得到了越来越多的支持。

简单的跨浏览器解决方案

选择元素的标准 JavaScript 方法是使用 ,这就是以下示例使用的 – 您当然可以通过其他方式获取元素,并且在适当的情况下可以简单地使用代替 – 但是,详细介绍这超出了答案的范围。document.getElementById("Id")this

更改元素的所有类:

若要将所有现有类替换为一个或多个新类,请设置 className 属性:

document.getElementById("MyElement").className = "MyClass";

(可以使用空格分隔的列表来应用多个类。

向元素添加其他类:

要在不删除/影响现有值的情况下向元素添加类,请附加一个空格和新类名,如下所示:

document.getElementById("MyElement").className += " MyClass";

从元素中删除类:

要在不影响其他潜在类的情况下将单个类删除到元素中,需要一个简单的正则表达式替换:

document.getElementById("MyElement").className =
   document.getElementById("MyElement").className.replace
      ( /(?:^|s)MyClass(?!S)/g , '' )
/* Code wrapped for readability - above is all one statement */

此正则表达式的解释如下:

(?:^|s) # Match the start of the string or any single whitespace character

MyClass  # The literal text for the classname to remove

(?!S)   # Negative lookahead to verify the above is the whole classname
         # Ensures there is no non-space character following
         # (i.e. must be the end of the string or space)

该标志告诉替换根据需要重复,以防类名已多次添加。g

检查类是否已应用于元素:

上面用于删除类的相同正则表达式也可以用作检查特定类是否存在:

if ( document.getElementById("MyElement").className.match(/(?:^|s)MyClass(?!S)/) )

### 将这些操作分配给 onClick 事件:

虽然可以直接在 HTML 事件属性(例如 )中编写 JavaScript,但这不是推荐的行为。特别是在较大的应用程序上,通过将 HTML 标记与 JavaScript 交互逻辑分离,可以实现更易于维护的代码。onClick="this.className+=' MyClass'"

实现此目的的第一步是创建一个函数,并在 onClick 属性中调用该函数,例如:

<script type="text/javascript">
    function changeClass(){
        // Code examples from above
    }
</script>
...
<button onClick="changeClass()">My Button</button>

(不需要在脚本标记中包含此代码,这只是为了简洁的示例,并且将 JavaScript 包含在不同的文件中可能更合适。

第二步是将 onClick 事件从 HTML 中移出并移入 JavaScript,例如使用 addEventListener。

<script type="text/javascript">
    function changeClass(){
        // Code examples from above
    }

    window.onload = function(){
        document.getElementById("MyElement").addEventListener( 'click', changeClass);
    }
</script>
...
<button id="MyElement">My Button</button>

(请注意,window.onload 部分是必需的,以便在 HTML 完成加载执行该函数的内容 – 如果没有这个,MyElement 在调用 JavaScript 代码时可能不存在,因此该行将失败。

 

JavaScript 框架和库

上面的代码都是标准JavaScript,但是,通常的做法是使用框架或库来简化常见任务,并从编写代码时可能没有想到的修复错误和边缘情况中受益。

虽然有些人认为添加一个~50 KB的框架来简单地改变一个类是矫枉过正的,但如果你正在做大量的JavaScript工作或任何可能有不寻常的跨浏览器行为的东西,这是非常值得考虑的。

(粗略地说,库是为特定任务设计的一组工具,而框架通常包含多个库并执行一组完整的职责。

上面的例子已经在下面使用jQuery重现,这可能是最常用的JavaScript库(尽管还有其他值得研究的)。

(请注意,这里是 jQuery 对象。$

使用 jQuery 更改类:

$('#MyElement').addClass('MyClass');

$('#MyElement').removeClass('MyClass');

if ( $('#MyElement').hasClass('MyClass') )

此外,jQuery 提供了一个快捷方式,用于添加不适用的类,或删除符合以下条件的类:

$('#MyElement').toggleClass('MyClass');

### 使用 jQuery 为点击事件分配函数:

$('#MyElement').click(changeClass);

或者,无需 ID:

$(':button:contains(My Button)').click(changeClass);

分割线

网友回答:

你也可以只做:

document.getElementById('id').classList.add('class');
document.getElementById('id').classList.remove('class');

并切换一个类(如果存在,请删除,请添加它):

document.getElementById('id').classList.toggle('class');

模板简介:该模板名称为【如何使用 JavaScript 更改 HTML 元素的类以响应事件或任何其他事件?onclick】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【JavaScript】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 348次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 02-20
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
微信文章 单页式简历模板 微信模板 微信公众平台 响应式 自适应 html5 微信图片 企业网站 微信素材
您可能会喜欢的其他模板