jQueryで作るAjaxな検索フォーム(テスト)
技術的にはだいぶ今さら感ある話題ですが作業のまとめとして。
サンプル
表題のフォームというのはこんな感じのです。 #sampleSearchResult a { border: none !important }仕様
- 検索語句を入力して「Flickrで検索する」を押すと僕のFlickrでの検索結果を表示する
- 「クリア」を押すと検索語句と検索結果を削除する
- 検索語句入力欄でリターンキーを押しても検索を開始する
技術的にはだいぶ今さら感ある話題ですが作業のまとめとして。
(function() {
$('#main').find('a').each(function(){
if($(this).children('img'))
$(this).css('border', 'none');
});
})();
リンクを貼っているのがテキストの場合には下線を引きたいけど、画像の場合には下線を引かないようにしたいと言う場合にCSSで何とかならないかと試行錯誤したけど無理そうだったのでjQueryで。勉強がてら。
参考書を手に組み立てると上みたいになるんだけどなんか無駄が多い気がする…
継続審議。
(function() {
$('#main').find('a').each(function(){
$(this).children('img')).parent().css('border', 'none');
});
})();
AutoPagerをFirefoxに入れて自分のTumblrを見ると、次のように繋がって見えてしまいます。
jQueryさえ利用していれば非常に少ない量のコードで簡単に実装でき、 CSSによるデザインのカスタマイズも柔軟に出来るという点で非常に便利です。 (異なるドメインのページを読み込むことは出来ませんが) 導入に当たっては以下のサイトを参考にさせていただきました。prettyPopin is a jQuery plugin that serves as a modal box. It is easily customizable and proved a lightweight solution to quickly and easily display content in context. It provides a nice way to display simple content or simple forms.
前回のエントリはこちら。 【メモ】 jQueryライブラリ読み込みの遅延処理 – nplll 前回のエントリでは、jQueryライブラリの読み込みを待って、画像の縮小表示を行うということをしたのだけど、 それでもまだ上手く縮小できないことがあって調査を進めた結果、
読み込んだAmazonの商品画像のサイズを、これで調整しているのですが、 【メモ】 画像の縦横比を維持したまま、画像サイズを一定の範囲内に縮小 – nplll どうも調整に失敗することが多くて上手く行かない。 どうやら、jQueryを読み込む前に処理を行おうとして失敗してるみたい。 GoogleからjQueryライブラリを読み込んでるせいかな? おや。 解決策: jQueryを読み込み終わるのを待って処理をするようにSetTimeoutを設定する。
縦横共に300px以内でかつ縦横比を維持したまま画像を縮小したかったので簡単なJavaScriptを書いてみた。 画面内の画像全てに適用するとするとこんな感じ。
var maxWidth = 300;
var maxHeight = 300;
var elements = document.getElementsByTagName("img");
for(i=0;i height) {
elements[i].width = Math.min(width, maxWidth);
} else {
elements[i].height = Math.min(height, maxHeight);
}
}
まぁはっきり言うと、「縦横比の維持」は基本的にブラウザ任せですね。
片方だけ指定すればもう片方は自動で計算される…というのは仕様的にどうなのだろう。
なお、幅だけを一定以内に収めたければこれをimgタグに置くだけで良いのだけど、
onload="this.width = Math.min(this.width, 300)";
縦長の画像(例えば縦1,000px/横100px)の場合に逆に拡大されてしまってはみ出る。
それを回避するためには、縦か横かどっちかデカイ方に対して適用すればOKと。
なんか処理を共通化する良い方法がありそうな気がするけど…まぁいいか。とりあえず。
javascript:function%20getID(id){return%20document.getElementById(id);};var%20u=location.href,d=/(http:\/\/www\.amazon\.(com|co\.jp))/;if(u.match(d)){t=getID("btAsinTitle").innerHTML;r2=RegExp.$2;if(r2=="co.jp")l="amazon.jp/dp/";else%20if(r2=="com")l="amzn.com/";else%20exit();l='';prompt("%E3%80%8C"+t+"%E3%80%8D",l);void(0);}
例えばこのページで実行すると↓
Amazon.co.jp: THE BEST OF スチャダラパー1990~2010: スチャダラパー: 音楽
こんなのが取れます。↓
実際の表示はこんな感じ↓
ある程度どうでも良いサイトの場合、パスワードを保存するリスクより利便性の方が上回るので、 結構積極的に保存してたりするんですが、サイトによっては保存できない設定になっている場合があります。 例えば…アフリエイトのMicroAd。 BTパートナー|行動ターゲティング,ブログ広告,リターゲティングのマイクロアド 左上にログインフォームがありますが、ここで入力したパスワードは保存されません。 (保存しますか?と聞かれない)
LightBox導入→prototype.js必須みたいな流れでprototype.jsを使っていたので、 競合するというjQueryをずっと触っていなかったのだけど(LightBoxだけなら何とかなるけど 他にもprototype依存のライブラリをいろいろ入れてしまってたし)、新しいサイトを作る中で どうせならjQueryに切り替えようぜってことで触ってみた。 テスト的な使い方として、
sampleCode
みたいなパーツをページ内にバラバラと撒いておき、
$(function () {
$('.sample').each(function () {
var sampleCode = $(this).text();
$(this).html('')
});
});
みたいなコードで変換するみたいなことをやってみた。
DOMについては慣れないと混乱するけど、Web+DB Vol.60の実践入門がだいぶ役に立った。
で、これが存外によい。
処理も速いけど、何より書くのが楽。
いや、良いのは評判としてもちろん聞いていたのだけど、それ含めても存外に良い。
無理してでも導入すべきだったか。むう。
もうちょっと色々やってみよう。