簡體   English   中英

舊版瀏覽器中classList`undefined`的解決方法?

[英]Workaround for classList `undefined` in legacy browser?

以下代碼可在所有現代瀏覽器中使用,但在舊版瀏覽器上會引發錯誤。 我該如何解決?

錯誤:

TypeError: Result of expression 'document.getElementById("profile").classList' [undefined] is not an object.

碼:

document.getElementById("mixdesign").addEventListener("webkitAnimationEnd",    design);

function design(){
  "use strict";
  document.getElementById("profile").classList.add("animation");
  location.href = "#profile"; 
} 

參見小提琴: https//jsfiddle.net/mm0o5jhw/3/

IE9和更早的版本不支持classList 用jQuery標記問題后,可以改用$.fn.addClass

$("#profile").addClass("animation")

由於較舊的瀏覽器不支持classList因此您需要使用polyfill或在元素上使用jQuery的addClass方法,或者僅使用普通的舊vanillaJS:

document.getElementById("profile").className += " animation";

使用classList是一種方便的替代方法,它可以通過element.className以空格分隔的字符串訪問元素的類列表。

僅在IE10及更高版本中退出

String.prototype.trim = String.prototype.trim || function () {
   return this.replace(/^\s+|\s+$/g, "");
};

 function getClassList(elem) {
     var trimmedClasses = elem.getAttribute("class").trim();

      return trimmedClasses ? trimmedClasses.split(/\s+/) : [];
 }

 function addClass(elem, c) {
     var classes = getClassList(elem);

     classes.push(c);

     elem.className = classes.join(" ");
 }

這是一個幼稚的實現,您可以在mdn中使用更強大的解決方案

Element.classList Api從IE10開始。

對於跨瀏覽器支持,您必須使用Element.className

區別在於classList是一個數組,具有添加刪除方法,className是一個簡單的字符串...

您已使用jQuery標記了問題,jQuery非常適合這些任務!

 function addClass() { var newClass = document.getElementById('baz').value || 'not-filled'; var classes = document.getElementById('foo').className.split(' '); classes.push(newClass) return document.getElementById('foo').className = classes.join(' '); } 
 <div id="foo" class="class1 class2 class3 classN"></div> <div style="padding: 1em;"> <input type="text" id="baz" /> <button onclick="addClass()">Add Class</button> </div> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM