投稿者: Anonymous

FirefoxアドオンをChrome拡張に移植中なんですが、Visual StudioなどにあるGUI、GridViewのような表示をしたくて悩んでます。具体的にどんなものかと言うと以下の画像のようなものです。

  1. 複数列表示ができる
  2. 行単位での選択・検知ができる



HTML, CSS のみで質問文にあるような動作を実現することは難しいと思います。DataTablestabulator のようなテーブル生成を行う JavaScript ライブラリを用いることで、そのようなことが可能です。

たとえば、 tabulator を使用した場合は下記コードのようになります。tabulator では選択や選択解除時に rowSelectionChanged イベントが発生します。これは最初の引数として、選択された順序で各行のデータの配列を渡す[1]ため、「行単位での選択・検知」が行えます。

Row Selection Changed[1]

Whenever the number of selected rows changes, through selection or deselection, the rowSelectionChanged event is triggered. This passes an array of the data objects for each row in the order they were selected as the first argument, and an array of row components for each of the rows in order of selection as the second argument.

また、今回は tabulator の CSS を変更せずに使用していますが、このような装飾は各要素に割り当てられたクラスへ CSS を適用することで、独自にカスタマイズすることが出来ます[2]。通常のように CSS を記述することは難しいですが、これらのクラスや属性セレクタなどを組み合わせることで、期待通りの装飾を施すことも出来ると思います。

CSS Classes[2]

The tables below outline the key classes involved in styling Tabulator. You can include your own custom CSS after importing the library to customise its look and feel



const dayOfWeek = {
  "日": 0,
  "月": 1,
  "火": 2,
  "水": 3,
  "木": 4,
  "金": 5,
  "土": 6

const table = new Tabulator("#grid-view", {
  columns: [{
      title: "URL",
      field: "url",
      title: "タイトル",
      field: "title",
      title: "表示間隔",
      field: "rating",
      sorter: "number"
      title: "曜日",
      field: "day",
      sorter: (day1, day2) => (dayOfWeek[day1] - dayOfWeek[day2])
      title: "時刻",
      field: "time",
      sorter: "time"
  cellVertAlign: "middle",
  height: "250px",
  layout: "fitColumns",
  selectable: true,
  rowSelectionChanged: function(data, rows) {

const tabledata = [{
    id: 1,
    url: "",
    title: "foo",
    rating: "6",
    day: "水",
    time: "7:00"
    id: 2,
    url: "",
    title: "hoge",
    rating: "12",
    day: "月",
    time: "9:00"
    id: 3,
    url: "",
    title: "bar",
    rating: "3",
    day: "木",
    time: "19:00"
    id: 4,
    url: "",
    title: "fuga",
    rating: "50",
    day: "火",
    time: "2:00"
    id: 5,
    url: "",
    title: "piyo",
    rating: "25",
    day: "土",
    time: "21:00"


.tabulator-row .tabulator-cell {
  height: 5em;


<link href="" rel="stylesheet">
<script src=""></script>
<script src=""></script>
<script src=""></script>

<div id="grid-view"></div>
<div class="select-stats"></div>




回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *