【问题标题】:HTML button click change the background color of the rowHTML按钮单击更改行的背景颜色
【发布时间】:2013-08-29 18:47:09
【问题描述】:

我有一个 HTML 表格,每行都有一个按钮。这里的目标是当一个按钮被点击时,整行都会改变背景颜色。 代码是:

<table>
    <tr>
        <td>Value1</td>
        <td>Value2</td>
        <td>
            <input type="button" value="press" onclick="myFunction(this)" />
        </td>
    </tr>
    <tr>
        <td>Value3</td>
        <td>Value4</td>
        <td>
            <input type="button" value="press" onclick="myFunction(this)" />
        </td>
    </tr>
</table>

<script type="text/javascript">
    function myFunction(e) {
        //change the background color of the row
    }
</script>

你能帮我解决这个问题吗?谢谢!

【问题讨论】:

    标签: javascript jquery html button


    【解决方案1】:

    您应该改用 class,并且最好删除 html 中的内联函数调用。

    使用这个:

    HTML

    <table>
        <tr>
            <td>Value1</td>
            <td>Value2</td>
            <td>
                <input type="button" value="press" />
            </td>
        </tr>
        <tr>
            <td>Value3</td>
            <td>Value4</td>
            <td>
                <input type="button" value="press" />
            </td>
        </tr>
    </table>
    

    jQuery

    var all_tr = $('tr');
    $('td input[type="button"]').on('click', function () {
        all_tr.removeClass('selected');
        $(this).closest('tr').addClass('selected');
    });
    

    演示here

    (更新)

    【讨论】:

    • 现在,我想要的是当我按下另一个按钮时,前一行的背景颜色恢复为默认值,以便突出显示当前行。你能帮我解决这个问题吗?
    • @user2701646,很高兴我能帮上忙!
    • 如果您要突出显示整行,我是否还建议table { padding:0px;border-collapse: collapse;} 去掉那些肮脏的白线。看到这个fiddle
    • 啊……太好了!另外,很好的答案。
    【解决方案2】:

    jQuery 的closest 方法非常适合这个,因为您在标签中包含了jQuery

    function myFunction(el) {
    //change the background color of the row
    
      $(el).closest('tr').css('background-color', 'red');
    }
    

    以非 jQuery 方式,您可以:

    function myFunction(el) {
    //change the background color of the row
      while (el && (el.tagName.toLowerCase() != 'tr'))
        el = el.parentNode;
    
      if (el)
        el.style.backgroundColor = 'red';
    }
    

    【讨论】:

    • +1 for closest 作为最可靠的答案。输入不必精确嵌套在 tr 下两层,因此.parent().parent() 的答案将来可能会中断。
    • 现在,我想要的是当我按下另一个按钮时,前一行的背景颜色恢复为默认值,以便突出显示当前行。你能帮我解决这个问题吗?
    • 最好将一个类添加到选定的行,然后(无论如何都是更好的做法)并在其上设置背景颜色。从其他人那里删除课程包含在各种问题中,例如:stackoverflow.com/questions/9683178/…
    【解决方案3】:

    您可以将这些解决方案与 jQuery 一起使用。

      <script type='text/javascript'>
        $('table input').bind('click', function (e) {       
            $(this).parent().parent().addClass('redBackground');    
        });
      </script>
    

    创建 CSS 类,我将其命名为“redBackground”。

    <style type='text/css'>
       .redBackground {
           background: #fff;
       }
    </style>
    

    问候。

    【讨论】:

    • 发送元素 input 的 parent 只是它所在的特定 td 单元格。这只会改变该单元格的颜色,而不是整行。通过上升两个父级别并使用子 css 选择器来查看 @crowebird 的响应。
    【解决方案4】:

    您可以这样做:http://jsfiddle.net/69sU7/

    myFunction = function(btn) {
        $(btn).parent().parent().addClass('highlight');
    }
    

    当点击按钮时,使用 jQuery,我们捕获 btn 本身,然后抓取它的父节点 (td),并抓取它的父节点 (tr)。然后我们将highlight 类添加到tr

    .highlight 类添加到它下面的所有td,黄色背景。

    【讨论】:

    • 现在,我想要的是当我按下另一个按钮时,前一行的背景颜色恢复为默认值,以便突出显示当前行。你能帮我解决这个问题吗?
    【解决方案5】:

    使用直接属性backgroundColor

    e.parentNode.parentNode.style.backgroundColor = '#ff0';
    

    http://jsfiddle.net/cguLU/1/

    要重置表中的其他行:

    http://jsfiddle.net/cguLU/2/

    function myFunction(e) {
      var tr = e.parentNode.parentNode;
      var table = e.parentNode.parentNode.parentNode;    
      //set current backgroundColor
        var len = table.childNodes.length;
        for (var i = 0; i < len; i++) {
          if (table.childNodes[i].nodeType == 1) {
            table.childNodes[i].style.backgroundColor = 'transparent';
          }
        }
        tr.style.backgroundColor = '#ff0';
    }
    

    【讨论】:

    • 现在,我想要的是当我按下另一个按钮时,前一行的背景颜色恢复为默认值,以便突出显示当前行。你能帮我解决这个问题吗?
    【解决方案6】:

    使用这个http://jsfiddle.net/4P3Jb/

    e.parentNode.parentNode.style.background = "red";
    

    【讨论】:

      猜你喜欢
      • 2014-10-09
      • 2017-08-02
      • 1970-01-01
      • 2014-10-10
      • 1970-01-01
      • 2022-11-13
      • 2020-09-26
      • 2021-06-21
      相关资源
      最近更新 更多