MW211 EXIT

devlog
PostgreSQL/列幅縮小
2012年09月17日
例えば16バイトの文字列を8バイトとする場合は、以下のような感じ。
┌──────────────────────────────────────┐
│UPDATE 表                                                                   │
│    SET 列 = SUBSTR(列, 1, 8);                                              │
├──────────────────────────────────────┤
│ALTER TABLE 表                                                              │
│    ALTER COLUMN 列                                                         │
│    TYPE character varying(8);                                              │
└──────────────────────────────────────┘
UPDATE文で事前にデータを切り捨てておけばスムーズに移行できる。

もちろん、サイズを大きく変更すれば列幅拡大ができる。
この場合は、当然ながら切り捨ては不要だ。
分類:PostgreSQL
jQuery/append()メソッドの要素指定の罠
2012年09月16日
┌──────────────────────────────────────┐
│.append($('<input>').prop('type','hidden'))                                 │
└──────────────────────────────────────┘
とかで、hidden属性とかを追加する訳だが、
セレクタのタグがいらねぇんじゃね?どうせタグ要素を指定するんだし、
とか思い、タグを取っ払った。
┌──────────────────────────────────────┐
│.append($('input').prop('type','hidden'))                                   │
└──────────────────────────────────────┘
するとsubmit時、他のPOST項目がクリアされてしまった。

大変だこりゃ(もちろん元に戻した)。

どういう仕組みなんだろう?
分類:注意、jQuery
jQuery/値を設定する場合の罠
2012年09月15日
┌──────────────────────────────────────┐
│.append($('<input>').prop('type', 'hidden')                                 │
│                    .prop('name', 'command')                                │
│                    .val(xyz)                                               │
│)                                                                           │
└──────────────────────────────────────┘
上記のような書き方は、以下のような書き方で代用できそうな気がする。
┌──────────────────────────────────────┐
│.html('<input type="hidden" name="command" value="' + xyz + '"/>')          │
├──────────────────────────────────────┤
│.append('<input type="hidden" name="command" value=" + xyz + '"/>')         │
└──────────────────────────────────────┘
こっちの方がHTML文に近いからわかりやすいし…。

実は怖い落とし穴があるのです。

変数xyzに「"」とかが入った場合。

サニタイズしていないので、valueに「"」が入らないのです。

ってことで、前者を使う方がいいみいたい。
但し、変な値が入らない場合は後者の方がわかりやすいかも。
とにかく、valueは文字列結合なんか使わないで、val()を使いましょうって話。
分類:注意、jQuery
jQuery/[0]を使ってなんとかやってたよ改善集(4)
2012年09月14日
┌──────────────────────────────────────┐
│$('tbody')[0].rows.length                                                   │
└──────────────────────────────────────┘
  ↓
┌──────────────────────────────────────┐
│$('tbody').children('tr').length                                            │
└──────────────────────────────────────┘
テーブルの行数を取得するには、children()を使うといいかも。
「tbody」の直下は「tr」しかないから、「children()」だけでもいいのかもね。
分類:jQuery
jQuery/[0]を使ってなんとかやってたよ改善集(3)
2012年09月13日
┌──────────────────────────────────────┐
│$('#セレクタ').scrollTop($('#セレクタ')[0].scrollHeight);                   │
└──────────────────────────────────────┘
  ↓
┌──────────────────────────────────────┐
│$('#セレクタ').scrollTop($('#セレクタ').prop('scrollHeight'));              │
└──────────────────────────────────────┘
末尾までスクロールするために、スクロール縦幅を取得するのはprop()で。
attr()だと取得できない(undefined)ので、ご注意を。
分類:jQuery
jQuery/[0]を使ってなんとかやってたよ改善集(2)
2012年09月12日
┌──────────────────────────────────────┐
│if ($('#セレクタ')[0]) {                                                    │
│    $('#セレクタ')[0].focus();                                              │
│}                                                                           │
└──────────────────────────────────────┘
  ↓
┌──────────────────────────────────────┐
│$('#セレクタ').focus();                                                     │
└──────────────────────────────────────┘
フォーカスをあてるのは、別に先頭要素にしなくてもよかったのね。
分類:jQuery
jQuery/[0]を使ってなんとかやってたよ改善集(1)
2012年09月11日
┌──────────────────────────────────────┐
│if ($(this).find(':hidden')[0])                                             │
└──────────────────────────────────────┘
  ↓
┌──────────────────────────────────────┐
│if ($(this).find(':hidden').length)                                         │
└──────────────────────────────────────┘
存在チェック。
ま、先頭の要素があるか否かで判断できるのですが、要素数を見た方がスマートかも。

なお、もっと、わかりやすく書けばこうです。
┌──────────────────────────────────────┐
│if ($(this).find(':hidden').length > 0)                                     │
└──────────────────────────────────────┘
分類:jQuery
Smarty/続・textareaタグを使う場合の注意
2012年09月10日
┌──────────────────────────────────────┐
│<textarea>{$初期値}</textarea>                                              │
└──────────────────────────────────────┘
てやると、先頭の空改行が削除されていくという問題があったが、
┌──────────────────────────────────────┐
│<textarea>                                                                  │
│{$初期値}                                                                   │
│</textarea>                                                                 │
└──────────────────────────────────────┘
今度は上記のようにすると、末尾に空改行が追加されていくという
対照的な事象があることがわかった。

ってことで、最適解は以下の形のようだ。
┌──────────────────────────────────────┐
│<textarea>                                                                  │
│{$初期値}</textarea>                                                        │
└──────────────────────────────────────┘

…う~ん、なんか不恰好。
分類:Smarty
PHP配列/先頭と末尾を取得(3)
2012年09月09日
あれ?よくよく考えると、やりたいことは元の配列に傷をつけずに、
先頭もしくは末尾のデータを取得すること。

これだけでよかった…んだね。

先頭データの値を取得する。
┌──────────────────────────────────────┐
│array_shift($配列);                                                         │
└──────────────────────────────────────┘
  ↓
┌──────────────────────────────────────┐
│reset($配列);                                                               │
└──────────────────────────────────────┘
末尾データの値を取得する。
┌──────────────────────────────────────┐
│array_pop($配列);                                                           │
└──────────────────────────────────────┘
  ↓
┌──────────────────────────────────────┐
│end($配列);                                                                 │
└──────────────────────────────────────┘
分類:PHP配列
PHP配列/先頭と末尾を取得(2)
2012年09月08日
前回の応用で、array_values()を使っても値が取得できる。
また、array_keys()を使えばキーまで取得できる。

先頭データのキーを取得する。
┌──────────────────────────────────────┐
│@array_shift(array_keys($配列));                                            │
├──────────────────────────────────────┤
│@reset(array_keys($配列));                                                  │
└──────────────────────────────────────┘
先頭データの値を取得する。
┌──────────────────────────────────────┐
│@array_shift(array_values($配列));                                          │
├──────────────────────────────────────┤
│@reset(array_values($配列));                                                │
└──────────────────────────────────────┘
末尾データのキーを取得する。
┌──────────────────────────────────────┐
│@array_pop(array_keys($配列));                                              │
├──────────────────────────────────────┤
│@end(array_keys($配列));                                                    │
└──────────────────────────────────────┘
末尾データの値を取得する。
┌──────────────────────────────────────┐
│@array_pop(array_values($配列));                                            │
├──────────────────────────────────────┤
│@end(array_values($配列));                                                  │
└──────────────────────────────────────┘

ワーニングが出るんで「@」も忘れずに。
分類:PHP配列
前へ 1 2 3 次へ