繁体   English   中英

在嵌套HTML表中获取列值onClick [Javascript]

[英]Get column value onClick in nested HTML Table [Javascript]

我有一个嵌套的HTML表格,可以在点击时展开。 当我点击内部行时,我想得到列值。 现在,我点击外行获取列值。 例如,在下图中,当我点击编码/测试时,我想将警报作为“地点”传递。 现在,当我点击城市时,我会收到警告作为“地点”。

在此输入图像描述

零件:

 trigger(){
  var table: any = document.getElementById("table");
  var rows = table.rows;
  for (var i = 0; i < rows.length; i++) {
  rows[i].onclick = (function (e) {
    var j = 0;
    var td = e.target;
    while( (td = td.previousElementSibling) != null ) 
        j++;
    alert(rows[0].cells[j].innerHTML);
 });
 }
 }

演示

您不需要任何DOM操作,您可以简化您的解决方案,如下所示:

app.component.ts

// .......
export class AppComponent {
  trigger(columnName: string) {
    alert(columnName);
  }
// .......
}

app.component.html

<table class="table table-hover table-bordered table-responsive-xl" id="table">
    <tr>
        <td> Name </td>
        <td> Place </td>
        <td> Phone </td>
    </tr>

    <tbody>

        <ng-container *ngFor="let data of data1">
            <tr (click)="data.expanded = !data.expanded">
                <td (click)="trigger('Name outer')"> {{ data.expanded ? '&ndash;' : '+'}} {{data.name}} </td>
                <td (click)="trigger('Place outer')"> {{data.place}} </td>
                <td (click)="trigger('Phone outer')"> {{data.phone}} </td>
                <td (click)="trigger('Hobbies Outer')"> {{data.hobbies}} </td>
                <td (click)="trigger('Profession outer')"> {{data.profession}} </td>
            </tr>

            <ng-container *ngIf="data.expanded">
                <tr *ngFor="let data of findDetails(data)">
                    <td style="padding-left: 12px" (click)="trigger('Name inner')"> {{data.datades.name}} </td>
                    <td (click)="trigger('Hobbies inner')"> {{data.datades.hobbies}} </td>
                    <td (click)="trigger('Profession inner')"> {{data.datades.profession}} </td>
                </tr>
            </ng-container>
        </ng-container>
    </tbody>
</table>

我不确定为什么你的trigger功能中有这个代码。 但是,如果在单击数据单元格时需要获取列名称,则可以使用以下方法。

  1. 注入trigger函数调用当前事件对象和标题行元素模板变量
<table class="table table-hover table-bordered table-responsive-xl" id="table">
    <tr #header>
    </tr>
    <tbody>
        <ng-container *ngFor="let data of data1">
            <ng-container *ngIf="data.expanded">
                <tr *ngFor="let data of findDetails(data)" (click)="trigger($event, header)">
                </tr>
            </ng-container>
        </ng-container>
    </tbody>
</table>

因此,# #header名称被分配给第一个tr元素,然后它与$event一起传递给trigger函数。

  1. trigger功能中,使用这两个参数。 $event将是一个常规的MouseEvent对象, header将是一个常规的tr元素。 在此之后,您可以通过行中单击的单元格索引找到单击的列标题。 StackOverflow线程中的gsnedders为如何在其父级中查找元素索引提供了解决方案。 您的trigger功能可能如下所示:
trigger($event, header) {
  const index = this.getChildNumber($event.target);
  alert(header.childNodes[index].textContent.trim());
}

这个StackBlitz项目说明了这种方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM