一覧画面で 0 円 と出ているテーブルのセルを判定したいです。
一行、1セルは取得できていて後は「0 円」をif判定すればいいだけのところなのですが
cell == “0 円”
これが必ず false になってしまいます。
わけが分からず非常に困惑しております。
どの様に判定すれば正しく判定がされるのか教えていただきたいです。
>コード
console.log(cell)
console.log(“0 円”)
console.log(cell == “0 円”)
>console
0 円
0 円
false
tanaka さん
こんにちは!
レコード一覧画面の一番上のレコードの特定フィールドの判定であれば、以下のような
記載で可能です。
event.records[0].[フィールドコード].value == "0円"
[0] の配列指定ですが、レコード一覧画面では表示されているレコードの上から順に
0,1,2… とインクリメントされます。
⇒ レコード一覧画面上で 2行目のレコードを指定する場合は、以下のように記載します。
event.records[1].[フィールドコード].value == "0円"
参考になりましたら幸いです。
tanaka さん
すいません。書き忘れたことがありました。
innerText でレコード一覧画面の表示を変更している場合は、
以下のような処理で innerText の内容を取得できます。
kintone.app.getFieldElements('フィールドコード')[0].innerText
参考になれば幸いです。
文系男さん
回答いただきありがとうございます。
event.recordsを利用すれば確かに取得できるのですが
その方法だと表示されていない行や、次のページに移った際に対応できないため利用していません。
innnerTextの内容の取得まではできているのですが
セル(フィールド)の文字列判定が思ったように行かないのが現状です。
innnerTextなので文字列で、"0円"と出ているのですが
text == “0円” とやってもtrueではなくfalseになってしまう為困っています。
tanaka さん
申し訳ございません。
いただいた情報から、まだ状況を把握できておりません。。。
InnerText はあくまで表示を変えるだけなので、実際のフィールドの値は
べつのものになりますので、取得したセルの値がフィールドの値である場合、
別の値で比較を行っている可能性があります。
上記が見当違いである場合、誠に申し訳ございませんが、
実際のソースコードや参考の画面キャプチャなどをいただけると
何か提案ができるかもしれません。ご検討いただけますと幸いです。
文系男さん
お付き合いいただき誠にありがとうございます。
コードは以下のような感じです。
table = レコードが並んでいるテーブルを getElementsByClassName で取得
for (var index = 0, rowlen = table.rows.length; index < rowlen; index++) {
let row = table.rows[index]
let cell_1 = row.cells[5]
let cell_2 = row.cells[6]
let cell1Text = cell_1.innerText
let cell2Text = cell_2.innerText
// Q. 1,2ともに フィールドが未入力、もしくは同じ場合
// ①でcontinueされる。
// これは正常に動作している。
// Q. 1,2どちらかのフィールドが 「0」 でもう片方が未入力の場合
// ②も③も判定に入らない。
// cell1Text="0" 、 cell2Text="" のとき ①はfalseでcontinueされない
// console.logで判定を見てみると以下のようになる
// console.log(cell1Text) // 0円
// console.log(cell2Text) //
// console.log(cell1Text == "0 円") // false
// console.log(cell2Text == "") // true
if(cell1Text == cell2Text){continue} // ①
if(cell1Text == "0 円" && cell2Text == ""){continue} // ②
if(cell2Text == "0 円" && cell1Text == ""){continue} // ③
}
tanaka さん
コチラを参考にして、カスタマイズビューでテーブルを表示してみたのですが、
問題なく InnertText を取得して比較可能でした。。。
参考までにサンプルを貼っておきます。
カスタマイズビュー
<div id="my-customized-view">
<table border="1">
<thead>
<tr>
<th>レコード番号</th>
<th>信号機</th>
<th>作成日時</th>
</tr>
</thead>
<tbody id="my-tbody">
</tbody>
</table>
</div>
JavaScript
(function() {
"use strict";
kintone.events.on('app.record.index.show', function(event) {
if (event.viewName !== 'カスタマイズビュー') {
return;
}
var records = event.records;
if (!records || !records.length) {
document.getElementById('my-customized-view').innerHTML = '表示するレコードがありません';
return;
}
var recUrl = location.protocol + '//' + location.hostname + '/k/' + kintone.app.getId() + '/show#record=';
var myRecordSpace = document.getElementById('my-tbody');
myRecordSpace.innerHTML = '';
for (var i = 0; i < records.length; i++) {
var record = records[i];
var row = myRecordSpace.insertRow(myRecordSpace.rows.length);
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
var cell3 = row.insertCell(2);
var tmpA = document.createElement('a');
tmpA.href = recUrl + record.レコード番号.value;
tmpA.innerHTML = record.レコード番号.value;
cell1.appendChild(tmpA);
cell2.innerHTML = record.信号機.value;
var createdAt = new Date(record.作成日時.value);
cell3.innerHTML = createdAt.toLocaleString();
}
var table = document.getElementById('my-tbody');
console.log(table.rows[0].cells[1].innerText);
console.log(table.rows[0].cells[1].innerText == "黄");
});
})();
貼っていただいたソースの中で、1点気になったのが、以下の内容ですが、“0円” ではなく、 “0 円” (“0” と半角スペースと “円”)で
比較しているようですが、こちらは関係なさそうでしょうか。
// console.log(cell1Text) // 0円
// console.log(cell1Text == "0 円") // false