问答详情
源自:4-1 编程挑战

为什么这样最后不能“取消设置”?

为什么最后不能用控制类名的方法取消设置呢?求解

提问者:Julieljy 2015-08-07 14:43

个回答

  • Perona
    2015-08-07 14:47:43
    已采纳

    因为one已经不是原来的one,样式已经被之前的JS改变了。建议用removeAttribute()方法吧。

    function cancel(){
           var myset=confirm("是否取消设置?")
           if(myset==true){
               mychar.removeAttribute('style');
          }
       }//定义"取消设置"的函数


  • 爱丽丝走丢了
    2015-08-17 09:41:31

    不好意思 我说的关于className不正确 应该是object.className=classname object是用document.ElementById获取的对象名。mychar.className="one"没问题

    但是在设置style和className后,同样是:

    <div id="txt"  style="width:XXX  height:XXX  dispaly: XXX "   class="one">

    但是行内样式优先级大于内联样式,所以one设置的样式不会起作用。

  • 爱丽丝走丢了
    2015-08-08 15:18:24

    不知道我这么说能不能听懂,首先注意你的mychar,它是变量(变量类型是Object),不是标签id。之前讲过更改className属性是为标签更改的。因此若想div应用one样式,应该是 txt.className="one".

    但是这么做也不会成功,这是因为在你设置了一系列 mychar.style.XXX后,就相当于这样:

    <div id="txt"  style="width:XXX  height:XXX  dispaly: XXX ">

    然后若按照我更改的 txt.className="one",会变成这样:

    <div id="txt"  style="width:XXX  height:XXX  dispaly: XXX " class="one">

    相当于为div标签添加了行内样式属性和class属性,而之前学过行内样式优先级大于内联样式,因此div样式还是用的行内样式,不会取消设置。

    因此最快捷的做法就是不用设置className,也不用在添加one样式,直接用

    mychar.removeAttribute("style");(为什么不用txt.removeAttribute("style"),这是因为txt仅仅是标签,而只有对象才具有属性和方法,这也就是之前为什么要var mychar=document.getElementById("txt")了,会将id为txt的标签转换为对象。)

    这样就会变成

    <div id="txt">

    这样可以取消style属性,会恢复为div的id(txt)设置的默认样式。