首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么HTML ();函数没有将数据属性赋值写入jQuery?

为什么HTML ();函数没有将数据属性赋值写入jQuery?
EN

Stack Overflow用户
提问于 2015-09-01 22:12:57
回答 3查看 52关注 0票数 0

我读到过,使用data- attribute触发CSS更改是一种很好的做法。我有这个菜单,我想要建立,我想改变一些CSS时,用户点击一个按钮。

我将一些CSS规则设置为open和closed,希望根据data-attribute进行切换。我在一个dom节点上将a data-atrib设置为data-navtogle。

代码语言:javascript
复制
<div class="collapsing-navigation" data-navtoggle="closed">

我选择该DOM节点并将其值从closed更改为open。

代码语言:javascript
复制
menuMobile.navtoggle = 'open';

但是它在DOM中保持不变,但是如果我在控制台中调用该属性,它会显示它是打开的。

代码语言:javascript
复制
console.log('current attr is ='+ menuMobile.navtoggle); //current attr is open

在控制台中,它显示它是打开的,但在DOMit中,它仍然关闭。

HTML

代码语言:javascript
复制
<nav class="navigation">
      <div class="navigation-header">Header
        <button type="button" class="menu-toggle">
          <span class="sr-only">Toggle navigation</span>
          <span class="hamburger-menu"></span>
          <span class="hamburger-menu"></span>
          <span class="hamburger-menu"></span>
        </button>
      </div>
      <div class="collapsing-navigation" data-navtoggle="closed">
        <ul>
          <li class=""><a href="#">Home</a></li>
          <li class=""><a href="#">About</a></li>
          <li class="">
            <a href="#">Solutions</a>
            <ul>
              <li class=""><a href="#">Sub 1</a></li>
              <li class=""><a href="#">Sub 2</a></li>
              <li class=""><a href="#">Sub 3</a></li>
            </ul>
            </li>
          <li class=""><a href="#">Mobile</a></li>
          <li class=""><a href="#">News</a></li>
          <li class=""><a href="#">Contact</a></li>
        </ul>
      </div>
    </nav>

Javascript:

代码语言:javascript
复制
$(function(){

  var menuToggle = $('.menu-toggle');
  var menuMobile = $('.collapsing-navigation');

  menuToggle.on('click',function(){

     if( menuMobile.data('navtoggle')==='closed' ){
       console.log("it was closed and im setting it to open");

       menuMobile.navtoggle = 'open';
       console.log('current attr is ='+ menuMobile.navtoggle);


     }
  });
});

CSS:

代码语言:javascript
复制
.collapsing-navigation[data-navtoggle=closed]
  height: 0

.collapsing-navigation[data-navtoggle=open]
  height: 100vh

.collapsing-navigation
  background-color: #00F
  height: 100vh
  position: relative
  z-index: 10
EN

回答 3

Stack Overflow用户

发布于 2015-09-01 22:16:22

因为jQuery数据方法允许您设置任何值。如果必须将其转换为属性,则必须是字符串值(或可转换为字符串的内容)。

我读到过,使用数据属性来触发CSS更改是一个很好的实践。

总的来说,我建议使用一个类会更好。

CSS类选择器编写起来更简单,jQuery addClass / removeClass使用起来也很方便。

票数 2
EN

Stack Overflow用户

发布于 2015-09-01 22:16:56

对于在DOM中发生的data-attribute更改,请使用attr('data-navtoggle', newAttr)

data('navtoggle')会分配一个新值,但不会影响DOM

检查以下示例:

代码语言:javascript
复制
$(document).on('click', '#btn-data', function() {
  $('#test').data('test','green');
});
$(document).on('click', '#btn-attr', function() {
  $('#test').attr('data-test','green');
});
代码语言:javascript
复制
div[data-test="red"] { color:red }
div[data-test="green"] { color:green }
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="test" data-test="red">Test div</div>
<button id="btn-data">Change to green via .data()</button><br />
<button id="btn-attr">Change to green via .attr()</button>

票数 2
EN

Stack Overflow用户

发布于 2015-09-01 22:15:22

通过jQuery.data设置一些数据不会修改DOM。如果您需要更新DOM,则应该使用.attr,如下所示:

代码语言:javascript
复制
$("elem").attr("data-navtoggle", "newvalue");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32333894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档