フィルター付きのテーブルのようなExcelのヘッダーと最初の行を固定します

user1365067

テーブル付きのフィルターのようなExcelがあり、必要なのは下にスクロールしてヘッダーと最初の行を固定することです。フィルタを適用しても機能するはずです。

フィドルに注意してください:

http://jsfiddle.net/6ng3bz5c/1/

私は以下を試しましたが、機能しませんでした:

$('tbody').scroll(function(e) { //detect a scroll event on the tbody
     $('tbody tr:nth-child(2)').css("down", $("tbody").scrollDown()); 
  });

最初の2つの強調表示された行は、下にスクロールすると固定されます。

案内してください。

nvioli

position: stickymdn)を組み合わせて使用first-of-typeして最初の行を処理することをお勧めします私自身のプロジェクトでは、クラスを使用してこれらのスタイルを設定しますが、マークアップを変更しないように要素セレクターを使用しています)。

cssについて詳しく知っtopていると、最初の行のオフセットをより応答性の高いものに変更できる場合もありますが、デモンストレーションでは、私に適していると思われる高さを使用しました。また、境界線を追加することもできます。

thead th{
  position:sticky;
  top:0;
  background:white;
}
tbody tr:first-of-type td{
  position:sticky;
  top:34px;
  background:white;
}

var myApp = angular.module('myApp', [])
  .controller('employeeController', function($scope) {
    $scope.XLfilters = { list: [], dict: {}, results: [] };
    $scope.markAll = function(field, b) {
      $scope.XLfilters.dict[field].list.forEach((x) => {x.checked=b;});
    }
    $scope.clearAll = function(field) {
      $scope.XLfilters.dict[field].searchText='';
      $scope.XLfilters.dict[field].list.forEach((x) => {x.checked=true;});
    }
    $scope.XLfiltrate = function() {
    	var i,j,k,selected,blocks,filter,option, data=$scope.XLfilters.all,filters=$scope.XLfilters.list;
      $scope.XLfilters.results=[];
      for (j=0; j<filters.length; j++) {
      	filter=filters[j];
        filter.regex = filter.searchText.length?new RegExp(filter.searchText, 'i'):false;
        for(k=0,selected=0;k<filter.list.length;k++){
        	if(!filter.list[k].checked)selected++;
          filter.list[k].visible=false;
          filter.list[k].match=filter.regex?filter.list[k].title.match(filter.regex):true;
        }
        filter.isActive=filter.searchText.length>0||selected>0;
      }
      for (i=0; i<data.length; i++){
        blocks={allows:[],rejects:[],mismatch:false};
      	for (j=0; j<filters.length; j++) {
          filter=filters[j]; option=filter.dict[data[i][filter.field]];
          (option.checked?blocks.allows:blocks.rejects).push(option);
          if(filter.regex && !option.match) blocks.mismatch=true;
      	}
        if(blocks.rejects.length==1) blocks.rejects[0].visible=true;
        else if(blocks.rejects.length==0&&!blocks.mismatch){
          $scope.XLfilters.results.push(data[i]);
        	blocks.allows.forEach((x)=>{x.visible=true});
        }
      }
      for (j=0; j<filters.length; j++) {
      	filter=filters[j];filter.options=[];
        for(k=0;k<filter.list.length;k++){
          if(filter.list[k].visible && filter.list[k].match) filter.options.push(filter.list[k]);
        }
      }
    }
    function createXLfilters(arr, fields) {
      $scope.XLfilters.all = arr;
      for (var j=0; j<fields.length; j++) $scope.XLfilters.list.push($scope.XLfilters.dict[fields[j]]={list:[],dict:{},field:fields[j],searchText:"",active:false,options:[]});
      for (var i=0,z; i<arr.length; i++) for (j=0; j<fields.length; j++) {
      z=$scope.XLfilters.dict[fields[j]];
      z.dict[arr[i][fields[j]]] || z.list.push(z.dict[arr[i][fields[j]]]={title:arr[i][fields[j]],checked:true, visible:false,match:false});
      }
    }

    createXLfilters(employees, ['Country','City']);
})

var employees = [{
  "Name": "Manirul Monir",
  "City": "Sylhet",
  "Country": "Bangladesh"
}, {
  "Name": "Arup",
  "City": "Sylhet",
  "Country": "Bangladesh"
}, {
  "Name": "Person 1",
  "City": "Dhaka",
  "Country": "Bangladesh"
}, {
  "Name": "Person 2",
  "City": "Dhaka",
  "Country": "Bangladesh"
}, {
  "Name": "Munim Munna",
  "City": "Narshingdi",
  "Country": "Bangladesh"
}, {
  "Name": "Mahfuz Ahmed",
  "City": "Narshingdi",
  "Country": "Bangladesh"
}, {
  "Name": "Tawkir Ahmed",
  "City": "Gazipur",
  "Country": "Bangladesh"
}, {
  "Name": "Alfreds 2",
  "City": "Berlin",
  "Country": "Germany"
}, {
  "Name": "Alfreds Futterkiste",
  "City": "Berlin",
  "Country": "Germany"
}, {
  "Name": "Blauer See Delikatessen",
  "City": "Mannheim",
  "Country": "Germany"
}, {
  "Name": "Blondel père et fils",
  "City": "Strasbourg",
  "Country": "France"
}, {
  "Name": "Bon app'",
  "City": "Marseille",
  "Country": "France"
}, {
  "Name": "Centro comercial Moctezuma",
  "City": "México D.F.",
  "Country": "France"
}];
.filterdropdown{
  background: #eee;
  border: 1px solid #bbb;
  color: #bbb;
  border-radius: 2px;
  font-size: 14px;
  line-height: 14px;
}
.filterdropdown.active{
  color: #005b9c;
}
a.filterlink{
  font-size: 12px;
}
.options {
  height: 150px;
  overflow-y: scroll;
}
thead th{
  position:sticky;
  top:0;
  background:white;
}
tbody tr:first-of-type td{
  position:sticky;
  top:34px;
  background:white;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<div class="col-md-6" ng-app="myApp" ng-controller="employeeController">
  <table class="table table-bordered table-condensed" data="{{XLfiltrate()}}">
    <thead>
      <tr>
        <th>Country
          <div class="dropdown" style="float: right">
            <button class="dropdown-toggle filterdropdown" ng-class="{active:XLfilters.dict['Country'].isActive}" type="button" data-toggle="dropdown"><span class="glyphicon glyphicon-filter"></span></button>
            <div class="dropdown-menu prop" aria-labelledby="btnSearchBatch" style="width: 250px; padding: 15px;">
              <div class="text-right">
                <a href="#" class="filterlink" ng-click="clearAll('Country')">Clear All</a> | <a href="#" class="filterlink" data-dismiss="modal">Close(X)</a>
              </div>
              <form>
                <input type="text" class="form-control input-sm" ng-model="XLfilters.dict['Country'].searchText" placeholder="Filter by Country" />
                <div>
                  <a href="#" class="filterlink" ng-click="markAll('Country',true)">Select All</a> | <a href="#" class="filterlink" ng-click="markAll('Country',false)">Select None</a>
                </div>
                <div class="options">
                  <ul style="list-style-type: none; padding: 0">
                    <li ng-repeat="item in XLfilters.dict['Country'].options">
                      <input id="countryOption{{$index}}" type="checkbox" ng-model="XLfilters.dict['Country'].dict[item.title].checked" />&nbsp;<label for="countryOption{{$index}}">{{item.title}}</label>
                    </li>
                  </ul>
                </div>
              </form>
            </div>
          </div>
        </th>
        <th>City
          <div class="dropdown" style="float: right">
            <button class="dropdown-toggle filterdropdown" ng-class="{active:XLfilters.dict['City'].isActive}" type="button" data-toggle="dropdown"><span class="glyphicon glyphicon-filter"></span></button>
            <div class="dropdown-menu prop" aria-labelledby="btnSearchBatch" style="width: 250px; padding: 15px;">
              <div class="text-right">
                <a href="#" class="filterlink" ng-click="clearAll('City')">Clear All</a> | <a href="#" class="filterlink" data-dismiss="modal">Close(X)</a>
              </div>
              <form>
                <input type="text" class="form-control input-sm" ng-model="XLfilters.dict['City'].searchText" placeholder="Filter by City" />
                <div>
                  <a href="#" class="filterlink" ng-click="markAll('City',true)">Select All</a> | <a href="#" class="filterlink" ng-click="markAll('City',false)">Select None</a>
                </div>
                <div class="options">
                  <ul style="list-style-type: none; padding: 0">
                    <li ng-repeat="item in XLfilters.dict['City'].options">
                      <input id="cityOption{{$index}}" type="checkbox" ng-model="XLfilters.dict['City'].dict[item.title].checked" />&nbsp;<label for="cityOption{{$index}}">{{item.title}}</label>
                    </li>
                  </ul>
                </div>
              </form>
            </div>
          </div>
        </th>
        <th>Name</th>
      </tr>
    </thead>
    <tbody>
      <tr ng-repeat="emp in XLfilters.results">
        <td>{{emp.Country}}</td>
        <td>{{emp.City}}</td>
        <td>{{emp.Name}}</td>
      </tr>
    </tbody>
  </table>
</div>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

スティッキーヘッダー付きのテーブル。ヘッダーの最後の列がテーブルと比較して広すぎます

分類Dev

テーブル(固定ヘッダー付き)の各ヘッダーセルの幅をその列の最大値と同じに設定し、ブラウザーにそれを尊重させるにはどうすればよいですか?

分類Dev

テーブルヘッダーと最初の2列を固定する

分類Dev

列ヘッダーとjspdf自動テーブルの行の間の最初の行としてフィールド名を追加するにはどうすればよいですか?

分類Dev

CSSのみ固定テーブルヘッダー(tdとtrのみのテーブルヘッダーなし)

分類Dev

PythonでExcelファイルを作成するときに、[0、1、2、...]のようなヘッダーとして行を取得するのはなぜですか?

分類Dev

固定ヘッダー付きのテーブル

分類Dev

Excelファイルのヘッダーとフッターのテキストを置き換えます

分類Dev

テーブルヘッダーとテーブルの最初の列をスティッキーにする方法

分類Dev

2つのテーブルを結合し、最初のテーブルをdatagridviewの列ヘッダーとして追加してから、2番目のテーブルを列ヘッダーの下の行として追加します

分類Dev

x軸(完全なテーブル)とy軸(ヘッダー固定)でスクロール可能なHTMLテーブルのようなExcel

分類Dev

PHP PDOを使用してPostgreSQLテーブルから.csvファイル(ヘッダー付き)をエクスポートします。最初のデータ行がありません

分類Dev

最初のファイルをループしたときにヘッダー行を追加したくない

分類Dev

グリッドレイアウトを使用して、固定/固定ヘッダー付きのテーブルを作成することは可能ですか?

分類Dev

データベース内のテーブルの最初の行の要素は、列名と2つのダッシュ、およびその値を返します。

分類Dev

シンボルの生のティックデータのパンダで最初の行をスキップし、2番目の行をヘッダーとして使用しているときにcsvを読み取ることができません

分類Dev

テーブルのスティッキーな行と列のヘッダー

分類Dev

フィルタが特定の行とヘッダーを非表示にしないようにするにはどうすればよいですか?

分類Dev

固定ヘッダー付きの水平および垂直スクロール付きテーブル

分類Dev

各印刷ページのExcelヘッダーをテーブルの最初の行にする方法

分類Dev

SQLiteの空のテーブルをヘッダー付きのcsvにエクスポートします

分類Dev

ヘッダー付きのdivをスクロールしますが、ヘッダーが消えたときに上部を20pxに固定します

分類Dev

Xamarin Formsを使用して、垂直方向にスティッキーなヘッダーと水平方向にスティッキーな最初の列を持つテーブルを作成するにはどうすればよいですか?

分類Dev

htmlangularのテーブルのヘッダーとスクロール可能なボディを修正しました

分類Dev

ヘッダー付きまたはヘッダーなしのcsvをインポートし、レコードに空の列フィールドを含めるにはどうすればよいですか?

分類Dev

最初のフィールドとしてヘッダーを印刷する - bash

分類Dev

TableViewerのヘッダー行(タイトル行)にメニューを追加しようとしています

分類Dev

スティッキーヘッダーとスティッキーな最初の列があり、最初の列のコンテンツがヘッダーの下にオーバーフローするテーブル-CSSのみ

分類Dev

より大きなデータテーブルの各ユーザーの最初/最後の行を選択したときのSQLパフォーマンス

Related 関連記事

  1. 1

    スティッキーヘッダー付きのテーブル。ヘッダーの最後の列がテーブルと比較して広すぎます

  2. 2

    テーブル(固定ヘッダー付き)の各ヘッダーセルの幅をその列の最大値と同じに設定し、ブラウザーにそれを尊重させるにはどうすればよいですか?

  3. 3

    テーブルヘッダーと最初の2列を固定する

  4. 4

    列ヘッダーとjspdf自動テーブルの行の間の最初の行としてフィールド名を追加するにはどうすればよいですか?

  5. 5

    CSSのみ固定テーブルヘッダー(tdとtrのみのテーブルヘッダーなし)

  6. 6

    PythonでExcelファイルを作成するときに、[0、1、2、...]のようなヘッダーとして行を取得するのはなぜですか?

  7. 7

    固定ヘッダー付きのテーブル

  8. 8

    Excelファイルのヘッダーとフッターのテキストを置き換えます

  9. 9

    テーブルヘッダーとテーブルの最初の列をスティッキーにする方法

  10. 10

    2つのテーブルを結合し、最初のテーブルをdatagridviewの列ヘッダーとして追加してから、2番目のテーブルを列ヘッダーの下の行として追加します

  11. 11

    x軸(完全なテーブル)とy軸(ヘッダー固定)でスクロール可能なHTMLテーブルのようなExcel

  12. 12

    PHP PDOを使用してPostgreSQLテーブルから.csvファイル(ヘッダー付き)をエクスポートします。最初のデータ行がありません

  13. 13

    最初のファイルをループしたときにヘッダー行を追加したくない

  14. 14

    グリッドレイアウトを使用して、固定/固定ヘッダー付きのテーブルを作成することは可能ですか?

  15. 15

    データベース内のテーブルの最初の行の要素は、列名と2つのダッシュ、およびその値を返します。

  16. 16

    シンボルの生のティックデータのパンダで最初の行をスキップし、2番目の行をヘッダーとして使用しているときにcsvを読み取ることができません

  17. 17

    テーブルのスティッキーな行と列のヘッダー

  18. 18

    フィルタが特定の行とヘッダーを非表示にしないようにするにはどうすればよいですか?

  19. 19

    固定ヘッダー付きの水平および垂直スクロール付きテーブル

  20. 20

    各印刷ページのExcelヘッダーをテーブルの最初の行にする方法

  21. 21

    SQLiteの空のテーブルをヘッダー付きのcsvにエクスポートします

  22. 22

    ヘッダー付きのdivをスクロールしますが、ヘッダーが消えたときに上部を20pxに固定します

  23. 23

    Xamarin Formsを使用して、垂直方向にスティッキーなヘッダーと水平方向にスティッキーな最初の列を持つテーブルを作成するにはどうすればよいですか?

  24. 24

    htmlangularのテーブルのヘッダーとスクロール可能なボディを修正しました

  25. 25

    ヘッダー付きまたはヘッダーなしのcsvをインポートし、レコードに空の列フィールドを含めるにはどうすればよいですか?

  26. 26

    最初のフィールドとしてヘッダーを印刷する - bash

  27. 27

    TableViewerのヘッダー行(タイトル行)にメニューを追加しようとしています

  28. 28

    スティッキーヘッダーとスティッキーな最初の列があり、最初の列のコンテンツがヘッダーの下にオーバーフローするテーブル-CSSのみ

  29. 29

    より大きなデータテーブルの各ユーザーの最初/最後の行を選択したときのSQLパフォーマンス

ホットタグ

アーカイブ