【问题标题】:checkbox css/jquery style change复选框 css/jquery 样式更改
【发布时间】:2017-02-15 11:44:32
【问题描述】:

我的代码的目的是在我选中/取消选中该框时更改颜色的 <td> 部分和表格内的字体,但它没有按预期工作我从here 获得的代码。

input[type=checkbox] + td {
    background-color: #FFFFFF;
    color:#000000
} 

input[type=checkbox]:checked + td {
    background-color: #00447C;
    color:#FFFFFF;
} 
<div id="details">
    <div class="container">
        <p>Example</p>
        <table id="table">
          <tr>
            <th></th>
            <th>Header 1</th>
            <th>Header 2</th>
          </tr>
          <tr>
            <td> <input type="checkbox"/></td>
            <td>element1</td>
            <td>detail1</td>
          </tr>
          <tr>
            <td> <input type="checkbox"/></td>
            <td>element2</td>
            <td>detail2</td>
          </tr>
          <tr>
            <td> <input type="checkbox"/></td>
            <td>element3</td>
            <td>detail3</td>
          </tr>
        </table>
        <button class="button">Reset</button>
    </div>  
</div>

它在源代码中有效,所以我对此感到困惑。

【问题讨论】:

  • 向 OP 添加代码时使用&lt;&gt; 创建演示
  • 抱歉,嘉鲁达,谢谢。
  • 你想要jquery解决方案还是css?
  • 两者,对不起。如果不允许我更改我的 html 代码,它似乎需要两者

标签: jquery html css checkbox


【解决方案1】:

使用 jquery,您可以执行以下操作:

var checkboxes = $("input[type='checkbox']");

function checkbox_function()
{
/*
  var tr = $(this).parent().parent();
  if ($(tr).hasClass('checked'))
  {
    $(tr).removeClass("checked");
  }
  else
  {
    $(tr).addClass("checked");
  }
*/
  var parent = $(this).parent();
  if ($(this).is(":checked"))
  {
    $(parent).siblings().addClass("checked");
  }
  else
  {
    $(parent).siblings().removeClass("checked");
  }
  
  
}

$.each(checkboxes, function(index, item) {
    $(item).change(checkbox_function);
  });
tr.unchecked {
    background-color: #FFFFFF;
    color:#000000
} 

tr.checked {
    background-color: #00447C;
    color:#FFFFFF;
}

td{
    background-color: #FFFFFF;
    color:#000000  
}

td.checked{
    background-color: #00447C;
    color:#FFFFFF;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="details">
    <div class="container">
        <p>Example</p>
        <table id="table">
          <tr>
            <th></th>
            <th>Header 1</th>
            <th>Header 2</th>
          </tr>
          <tr>
            <td> <input type="checkbox"/></td>
            <td>element1</td>
            <td>detail1</td>
          </tr>
          <tr>
            <td> <input type="checkbox"/></td>
            <td>element2</td>
            <td>detail2</td>
          </tr>
          <tr>
            <td> <input type="checkbox"/></td>
            <td>element3</td>
            <td>detail3</td>
          </tr>
        </table>
        <button class="button">Reset</button>
    </div>  
</div>

它的作用是获取所有复选框,然后在它们上放置一个更改侦听器。

(根据自己的喜好编辑)。

【讨论】:

  • 如果我将 tr 更改为 td 是否可以,因为它可能会与我的标题 css 代码冲突
  • 这很奇怪,因为代码在你的 sn-p 中工作,但它对我的工作不工作,我将不得不再看一遍。
  • 如果你希望它只与 td 一起使用,我可以再次更改代码。这真的只是一个懒惰的例子。如果您不介意 tr,只需向其添加一个类,这样它就不会干扰其他没有该类的 tr 东西
  • 我被告知根本不要触摸我的 html。所以我只是将 jquery 和 css 中的所有 tr 替换为 td
  • 我改变了答案,所以它只影响 tds(后续)。
【解决方案2】:

CSS 中的+ 选择器选择与前一个选择器相邻的元素。所以input + td 将在以下示例中选择&lt;td&gt;

<input />
<td></td>

但不是在这个:

<div>
    <input />
</div>
<td></td>

因此,您的 CSS 不会指向标记中现有的 &lt;td&gt; 元素。

编辑:一种(示例)解决方法是省略您的&lt;td&gt; 标签,因为所有符合标准的浏览器都实现了没有&lt;td&gt;s 的表。

【讨论】:

  • 那我必须用 + #table.td 代替吗?
  • 等待,但由于我的复选框,我必须使用输入。
  • 遗憾的是,您不能使用 CSS 指向父/祖先元素。您唯一的选择是更改标记或使用 JS。纯 CSS 无法用那个确切的 HTML 完成你想要的(据我所知)。
  • 这解释了为什么他们最终也会让我触摸我的 JS……谢谢
【解决方案3】:

css中的加号表示:

选择每个样式并设置样式

元素紧跟在 div + p { background:'#fff'; 元素之后}

这意味着在你的情况下它会选择输入[..]之后的任何 td

【讨论】:

    【解决方案4】:

    加号 (+) 是指同级,但您的复选框是单元格的子级,因此您应该使用 V 形 (>) 或空格 ()。

    http://techbrij.com/css-selector-adjacent-child-sibling

    但是,您不能根据子级设置父级的样式,反之亦然。所以你可能不得不求助于 javascript 从单元格中添加/删除一个类。

    【讨论】:

    • &gt; 选择器指向前一个选择器的直接子代。输入元素不能有子元素。 编辑:(指这个答案的先前版本)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    相关资源
    最近更新 更多