代码之家  ›  专栏  ›  技术社区  ›  FoxyBOA

Javascript只能访问内部表

  •  0
  • FoxyBOA  · 技术社区  · 7 年前

    我有一个生成嵌套表列表的系统。我既不能修改它,也不能向任何父表添加任何id/tags/classes。我也不能添加jQuery或任何其他JS库。

    有人能帮我调整一下样品以适应我的情况吗?它获取的代码的问题 <td/>

    var tds = document.getElementsByTagName( "td" );
        for( var i = 0; i < tds.length; i++ ) {
          tds[i].addEventListener("mouseover", function(){
              var children = this.parentNode.getElementsByTagName("td");
              for( var j = 0; j < children.length; j++ )
                children[j].style.backgroundColor = "green";
              });
          tds[i].addEventListener("mouseout", function(){
             var children = this.parentNode.getElementsByTagName("td");
                for( var j = 0; j < children.length; j++ )
                        children[j].style.backgroundColor = "initial";
                });
            }
        
       
    
    <table>
        <tr>
        <td>
            <table>
                <tr>
                    <td>cell1,1</td>
                    <td>cell1,2</td>
                    <td>cell1,3</td>
                </tr>
                <tr>
                    <td>cell2,1</td>
                    <td>cell2,2</td>
                    <td>cell2,3</td>
                </tr>
            </table>
        </td>
        <td> test </td>
        </tr>
    </table>

    不幸的是,我在JS方面还不够好。

    1 回复  |  直到 7 年前
        1
  •  4
  •   j08691    7 年前

    我放弃JavaScript,使用一个简单的CSS选择器

    table table tr:hover {
      background: green;
    }
    <table>
      <tr>
        <td>
          <table>
            <tr>
              <td>cell1,1</td>
              <td>cell1,2</td>
              <td>cell1,3</td>
            </tr>
            <tr>
              <td>cell2,1</td>
              <td>cell2,2</td>
              <td>cell2,3</td>
            </tr>
          </table>
        </td>
        <td> test </td>
      </tr>
    </table>
        2
  •  1
  •   Ehtesham Z    7 年前

    如果嵌套表的数目总是2,那么上面提到的答案是有效的。根据需求,您提到您通常有2-3个嵌套表,因此如果有3个或更多的嵌套表,它将无法工作。你必须改变你的CSS选择器。

    使用下面的解决方案,总是将最内层表的行作为 请求。

    var tables = document.getElementsByTagName("table");
    tables[tables.length - 1].classList.add("highlighter");
    .highlighter tr:hover {
      background: green;
    }
    <table>
      <tr>
        <td>
          <table>
            <tr>
              <td>cell1,1</td>
              <td>cell1,2</td>
              <td>cell1,3</td>
            </tr>
            <tr>
              <td>cell2,1</td>
              <td>cell2,2</td>
              <td>cell2,3</td>
            </tr>
          </table>
        </td>
        <td> test </td>
      </tr>
    </table>