新規投稿
フォローする

kViewerで数値型の空カラムが0に自動変換されるのを回避したい

Javascript初心者です。初めて投稿します。

kViewerにて、数値型カラムを表示した時に、kintoneでは空カラムなのに、kViewerでは0に自動変換されてしまいます。kViewerのサポートデスクに相談したところ、「桁区切りをオフにすれば解消する。桁区切りがオン状態では、この現象になる。本件を改修するつもりだが、実施時期は未定」との回答をいただきました。今回の使い方では、空カラムと0とを区別して表示しており、かつ金額で桁区切りで表示したいと思っています。自力でなんとかできないかと思い、kViewer上のJavascript機能を使って対応するべくいろいろ試しましたが、上手くいきません。

当初は「kintoneで桁区切りをオンにして、kViewer上ではJavascriptで『空カラム→0になった』部分の0を除去する」ことも考えましたが、kViewerのHTMLソース内では、元が空カラム→0と、もともとの0を区別できそうになかったので、止めました。
そこで、「kintoneでは桁区切りをオフにして、kViewer上でJavascriptで桁区切りを付与する」方法で試してみました。kintoneで桁区切りをオフにして、以下のスクリプトを試したところ、桁区切りは実装されましたが、もともと空カラムの部分も0に自動変換されてしまいました。

var allTags = document.getElementsByTagName('*');
for (var i =0;i<allTags.length;i++){
if(allTags[i].className=="kv-index-td kv-index-td-9999999"){
allTags[i].innerHTML=Number(allTags[i].innerHTML).toLocaleString();
}
}

IF条件にて、「カラムが空でない場合」をAND条件で追加すればよいと思いまして、以下の感じで組んでみましたが、「カラムが空でない場合」のAND条件が追加されません。「&& allTags[i] != ""」の部分を「&& allTags[i] != /^\d*$/」にしてみても、やはり0に自動変換されてしまいました。


var allTags = document.getElementsByTagName('*');
for (var i =0;i<allTags.length;i++){
if(allTags[i].className=="kv-index-td kv-index-td-9999999" && allTags[i] != ""){
allTags[i].innerHTML=Number(allTags[i].innerHTML).toLocaleString();
}
}


ぜひともアドバイスをいただけると幸いです。よろしくお願いいたします。

0

3件のコメント

Avatar
カキ氷

Tessaiさん

 

現状だと要素自体を見ているので、中のテキストを指定する必要があります。

以下のように「textContent」を追加してみてください。

if(allTags[i].className=="kv-index-td kv-index-td-9999999" && allTags[i].textContent != ""){

 

Node.textContent

https://developer.mozilla.org/ja/docs/Web/API/Node/textContent

 

あと、このような場合はまずはログを仕込んでデバックしてみるといいと思いますよ。

if文の前で alert(***) or console.log(***) と記述して、if判定前のオブジェクトの中身を見てみましょう。現状の問題がわかってきます。

1
Avatar
Tessai

アドバイスを使って試行錯誤して、ようやくできました。ありがとうございました。

そのままだと上手く動作しなかったのですが、console.logを使ってデータを解析したところ、

空白文字が前後にあって、これが比較の邪魔になっていたことが判ったので、trim()をさらに

付与したところ、意図どおりに動作するようになりました。

var allTags = document.getElementsByTagName('*');
for (var i =0;i<allTags.length;i++){
if(allTags[i].className=="kv-index-td kv-index-td-999999" && allTags[i].textContent.trim() != ''){
allTags[i].innerHTML=Number(allTags[i].innerHTML).toLocaleString();
}
}

console.logの使い方も判ったので、これから使ってみます。

 

Tessaiにより編集されました
1
Avatar
カキ氷

Tessai さん

 

解決できてよかったです! しかも解析力まで。本当によかったです^^

0
サインインしてコメントを残してください。