【问题标题】:How to change CSS property using JavaScript如何使用 JavaScript 更改 CSS 属性
【发布时间】:2013-02-20 22:09:34
【问题描述】:

我想使用 JavaScript 更改一个类的 CSS 属性。我真正想要的是当一个<div> 悬停时,另一个<div> 应该变得可见。

.left,
.right {
  margin: 10px;
  float: left;
  border: 1px solid red;
  height: 60px;
  width: 60px
}

.left:hover,
.right:hover {
  border: 1px solid blue;
}

.center {
  float: left;
  height: 60px;
  width: 160px
}

.center .left1,
.center .right1 {
  margin: 10px;
  float: left;
  border: 1px solid green;
  height: 60px;
  width: 58px;
  display: none;
}
<div class="left">
  Hello
</div>
<div class="center">
  <div class="left1">
    Bye
  </div>
  <div class="right1">
    Bye1
  </div>
</div>
<div class="right">
  Hello2
</div>

当 hello1 div 悬停时,bye1 div 应该可见,同样,当 hello2 悬停时 bye2 应该出现。

【问题讨论】:

    标签: javascript html css hover


    【解决方案1】:

    您可以为此使用style 属性。例如,如果你想改变边框 -

    document.elm.style.border = "3px solid #FF0000";
    

    类似的颜色 -

     document.getElementById("p2").style.color="blue";
    

    最好的办法是定义一个类并执行此操作 -

    document.getElementById("p2").className = "classname";

    (必须相应地考虑跨浏览器工件)。

    【讨论】:

      【解决方案2】:
      // select element from DOM using *const*
      const sample = document.getElementById("myid"); // using CONST
      // or you can use *var*
      var sample = document.getElementById("myid"); // using VAR
      
      // change css style
      sample.style.color = 'red'; // Changes color, adds style property.
      // or (not recomended)
      sample.style = "color: red"; //Replaces all style properties. NOT RECOMENDED
      

      【讨论】:

      • 我认为代码根本不需要任何解释
      【解决方案3】:

      使用document.getElementsByClassName('className').style = your_style

      var d = document.getElementsByClassName("left1");
      d.className = d.className + " otherclass";
      

      对包含在 html 属性的双引号中的 JS 字符串使用单引号

      示例

      <div class="somelclass"></div>
      

      然后document.getElementsByClassName('someclass').style = "NewclassName";

      <div class='someclass'></div>
      

      然后document.getElementsByClassName("someclass").style = "NewclassName";

      这是个人经验。

      【讨论】:

      • 没有getElementByClassName这样的东西。
      • 关键是你忘记了ElementClass之间的s...应该是getElementsByClassName
      • 我很确定单引号和双引号在这种情况下不会有任何区别(浏览器会将它们解释为相同;尝试右键单击带有单引号的元素并转到“检查元素" 在 Firefox 中。你会发现它有双引号)。只有当您需要嵌套它们时,这种区别才值得,例如document.querySelector('input[type="checkbox"]')
      • 这仍然不正确,getElementsByClassName 返回的是元素列表,而不是单个元素。您必须对其进行迭代并对它们中的每一个应用更改。
      【解决方案4】:

      考虑以下示例: 如果您想更改单个 CSS 属性(例如,将颜色更改为“蓝色”),则以下语句可以正常工作。

      document.getElementById("ele_id").style.color="blue";
      

      但是,对于更改多个属性,更可靠的方法是使用 Object.assign()object spread operator {...};

      见下文:

      const ele=document.getElementById("ele_id");
      const custom_style={
          display: "block",
          color: "red"
      }
      
      //Object.assign():
      Object.assign(ele.style,custum_style);
      

      扩展运算符的工作原理类似,只是语法有点不同。

      【讨论】:

        【解决方案5】:

        仅供参考,这可以通过 CSS 完成,只需对 HTML 和 CSS 进行少量更改

        HTML:

        <div class="left">
            Hello
        </div>
        <div class="right">
            Hello2
        </div>
        <div class="center">
               <div class="left1">
                   Bye
            </div>
               <div class="right1">
                   Bye1
            </div>    
        </div>
        

        CSS:

        .left, .right{
            margin:10px;
            float:left;
            border:1px solid red;
            height:60px;
            width:60px
        }
        .left:hover, .right:hover{
            border:1px solid blue;
        }
        .right{
             float :right;
        }
        .center{
            float:left;
            height:60px;
            width:160px
        }
        
        .center .left1, .center .right1{
            margin:10px;
            float:left;
            border:1px solid green;
            height:60px;
            width:58px;
            display:none;
        }
        .left:hover ~ .center .left1 {
            display:block;
        }
        
        .right:hover ~ .center .right1 {
            display:block;
        }
        

        和演示:http://jsfiddle.net/pavloschris/y8LKM/

        【讨论】:

          【解决方案6】:
          var hello = $('.right') // or var hello = document.getElementByClassName('right')
          var bye = $('.right1')
          hello.onmouseover = function()
          {
              bye.style.visibility = 'visible'
          }
          hello.onmouseout = function()
          {
              bye.style.visibility = 'hidden'
          }
          

          【讨论】:

          • 您注释的非 JQuery 代码将不起作用(getElementsByClassName - 注意复数 - 返回 NodeList,而不是元素)。等效代码(我相信这是 JQuery 使用的)将是 var hello = document.querySelector('.right')
          【解决方案7】:

          你可以像这样使用 jQuery 来做到这一点。

          $('.left, .right').on('mouseenter', function(e) {
              if ($(this).attr('class') == 'left1') {
                  $('.left1').css({
                      /* 'visibility': 'visible', */
                      'display': 'block',
                  })
              } else if ($(this).attr('class') == 'left1') {
                  $('.right1').css({
                      /* 'visibility': 'visible', */
                      'display': 'block',
                  })
              }
          })
          

          或者你可以像这样使用它

          第一个要求

          $('.left').on('mouseenter', function(e) {
              $('.left1').css({
                  /* 'visibility': 'visible', */
                  'display': 'block',
              })
          })
          

          第二个要求

          $('.right').on('mouseenter', function(e) {
              $('.right1').css({
                  /* 'visibility': 'visible', */
                  'display': 'block',
              })
          })
          

          【讨论】:

            【解决方案8】:

            使用 jQuery 真的很容易。

            例如:

            $(".left").mouseover(function(){$(".left1").show()});
            $(".left").mouseout(function(){$(".left1").hide()});
            

            我已经更新了你的小提琴: http://jsfiddle.net/TqDe9/2/

            【讨论】:

            • 这只是显示或隐藏元素,不会改变任何css。
            猜你喜欢
            • 1970-01-01
            • 2012-07-07
            • 2013-06-13
            • 1970-01-01
            • 1970-01-01
            • 2018-03-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多