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

来源:4-1 编程挑战

Julieljy

2015-08-07 14:43

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

写回答 关注

3回答

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

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

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


    Juliel...

    非常感谢!

    2015-08-07 14:55:41

    共 1 条回复 >

  • 爱丽丝走丢了
    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)设置的默认样式。

    来自疯人院的... 回复Juliel...

    我也有这个疑问,呵呵。我同样是应用className无效才跑来看的。@爱丽丝走丢了 所说的我尚有存疑,但感觉也有些道理。看来这个className并不是那么好用哦。

    2015-08-12 10:29:51

    共 2 条回复 >

JavaScript入门篇

JavaScript做为一名Web工程师的必备技术,本教程让您快速入门

739816 学习 · 9566 问题

查看课程

相似问题