代码之家  ›  专栏  ›  技术社区  ›  rid

如何删除DOM元素属性?

  •  0
  • rid  · 技术社区  · 3 年前

    如果我有一个具有属性的元素 className 设置为“test”,如何删除与该属性关联的HTML属性?

    我努力实现的目标示例:

    const set = (el, prop, value) => el[prop] = value;
    const rm  = (el, prop)        => delete el[prop]; // How do I do this?
    
    const el = document.createElement("div");
    
    set(el, "className", "test"); // el: <div class="test"></div>
    rm (el, "className");         // el: <div></div>
    

    我是否必须将属性映射到属性并使用 removeAttribute() ?如果是,DOM是否提供了我可以使用的映射?还是我必须自己写?

    或者有类似的东西 delete el.className 我可以用的?

    其他属性(如 onclick , htmlFor

    示例:

    const el = document.createElement("div");
    el.className = "test";
    
    // How do I unset className?
    delete el.className; // Doesn't do anything.
    el.className = null; // Sets the string "null". Same for "undefined".
    
    // Do I need to do this?
    // If so, can I get this from somewhere in the DOM?
    const propToAttrMap = { "className": "class", "htmlFor": "for", ... };
    el.removeAttribute(propToAttrMap["className"]);
    
    2 回复  |  直到 3 年前
        1
  •  1
  •   Phil    3 年前

    请尝试将属性设置为空字符串。它不一定要删除属性,但应该使其无效 disabled 它应该类似地工作。

    我能想到的一个警告是,一旦元素被赋予了属性 出现在查询选择器下,这在以前是不存在的。

    const set = (el, prop, value) => el[prop] = value;
    const rm  = (el, prop)        => el[prop] = "";
    
    const btn = document.querySelector("button")
    const div = document.querySelector("div")
    
    console.log("original:", div.innerHTML)
    console.log("classy elements:",
      document.querySelectorAll("[class]").length)
    
    set(btn, "className", "red")
    set(btn, "disabled", true)
    console.log("set both:", div.innerHTML)
    
    rm(btn, "className")
    console.log("rm className:", div.innerHTML)
    
    rm(btn, "disabled")
    console.log("rm disabled:", div.innerHTML)
    console.log("classy elements:",
      document.querySelectorAll("[class]").length)
    <div><button>Click me!</button></div>
        2
  •  0
  •   Zain Shabir    3 年前

    class 是你的属性&为了删除任何属性,您只需要编写:

    el.removeAttribute('your_attribute')
    

    在您的情况下:

    el.removeAttribute('class')
    

    enter image description here

        3
  •  0
  •   SYED TOUSIF    3 年前

    虽然jQuery提供了一个额外的方法(addProp()和removeProp())来设置和获取元素属性值, 是的,在纯JavaScript中没有这么大的东西。元素属性,如href、title、alt和value,可以作为JavaScript对象属性直接访问。

    下面找一个例子。

    var el = document.querySelector('a');
    console.log(el.href);
    if (el.title != 'Welcome') el.title = 'Welcome';
    
    var inp = document.querySelector('input[type="text"]');
    console.log(inp.value);
    inp.value = 'Hello World!';
    

    甚至可以向DOM元素添加和删除新属性,如下所示。

    var el = document.querySelector('div');
    el.animal= { name: 'Lion'};
    console.log(el.animal);
    delete el.foo;
    

    谢谢