jQueryでマウス右クリックを無効にする方法です。
“contextmenu”のイベントはjQueryのドキュメントには乗ってませんが、
それのハンドラでreturn falseすることで簡単に実現できます。
$("document").bind("contextmenu", function(){
return false;
});
jQueryでマウス右クリックを無効にする方法です。
“contextmenu”のイベントはjQueryのドキュメントには乗ってませんが、
それのハンドラでreturn falseすることで簡単に実現できます。
$("document").bind("contextmenu", function(){
return false;
});
テキストボックスの文字を選択された状態にする方法とその解除方法です。
IEの場合selectボックスにselect()関数を使うとJavaScriptエラーになります。
Firefoxは大丈夫です。
function selectFocusText(element){
// for IE
if (element.nodeName == "SELECT") return;
element.select();
};
function unselectFocusText(){
// for IE
if (document.selection) {
document.selection.empty();
// for Firefox
} else if (window.getSelection) {
window.getSelection().removeAllRanges();
}
};
htmlにoptionが一つしかないselectboxがあるとします。
このようなselectを非表示にし、そのテキストラベルで表示させたいのもありですね。
//:only-childフィルタで子要素が一つしかない要素を選択
var $target = $("select :only-child");
$.each($target, function(index, item) {
// spanのhtmlを構築
var span = '' + $(this).text() + '';
// thisはoptionを指しているため、そのparentのselect要素を非表示
// 構築したspanを挿入
$(this).parent().hide().after(span);
});
selectボックスの先頭がblankのケースが結構あると思います。
その場合はラベル表示させたくないです。
なのでそれをフィルタするには、以下のようにfilter()を使います。
var $target = $("select :only-child").filter(function(index) {
return $.trim($(this).text()).length != 0;
});
jQueryにはblankを検出するメソッドがないため、上記のソースコードでは
$.trim()を利用して判断しています。
しかしこの$.trim()は遅いとの報告がありました。
そこでblankのテキストを検出するためのメソッドも提供されました。
$.trim()が2000msかかったものがこれだと0.5msになったようです。
blank: function( text ) {
return !text || !/\S/.test(text);
}
興味のある方はこの記事を参照してください。英語のサイトです。
Zipalong Blog » Blog Archive » jQuery: x1000 faster test for blank strings (on large strings)
toggle()の普通の使い方は多分皆さんご存知だと思います。
該当要素をクリックするたびに表示/非表示を切り替えます。
今日紹介するのはこのswitchパラメータ付のtoggleです。
swtich文を評価しtrueであれば要素を表示、falseであれば非表示です。
これで下記のコードがこのswtich付きのtoggle文なら一行ですみます。
if (name == "kinopyo") {
$("p").show();
} else {
$("p").hide();
}
これがこうなります。
$("p").toggle(name == "kinopyo");
どうですか?すごくないですか?
まさにjQueryの「The Write Less, Do More」ですよね。
ただし判断の条件文が行の最後になるので、
読みやすさは多少落ちると思います。
ちなみに、Googleの単語とよく似ているので、ついついtoogleと書いちゃいますorz
gihyoサイトの「ここが危ない!Web2.0のセキュリティ」連載の第4回:「Flash,JSONでのクロスドメインアクセス」の勉強メモです。
データ提供側で認証のファイルを設置するだけです。
ファイル名は「crossdomain.xml」で、これが例なのかこう書かなければならないのかは明確に書いてません。
eval()関数でデータを評価するだけで使用可能になる
var obj = eval("("+req.responseText+")");
setterメソッドをサポートしているブラウザ(FirefoxやSafari 3等)では,setterメソッドを再定義することによって,JSONもSCRIPTタグで呼び出して使うことが可能になる。
@IT連載:jQuery逆引きリファレンスの第二回のテーマは属性&コンテンツです。
目次は以下になります。
* 属性値を取得するには?
* 属性値を設定するには?
* 複数の属性値をまとめて設定するには?
* 関数の結果によって動的に属性値を設定するには?
* 属性値を削除するには?
* スタイル・クラスを追加/削除するには?
* スタイル・クラスが適用されているかを判定するには?
* スタイル・クラスの適用/解除を交互に行うには?
* 要素に適用されたスタイル情報を取得するには?
* 要素に特定のスタイルを適用するには?
* 複数のスタイル・プロパティをまとめて設定するには?
* 要素の表示位置を取得するには?
* ページのスクロール位置を取得/設定するには?
* 要素の高さや幅を取得するには?
* 要素の高さや幅を設定するには?
* 要素のテキストを取得するには?
* 要素のテキストを設定するには?
* フォーム要素の値を取得/設定するには?
(1)取得する対象
要素セット(jQueryオブジェクト)が複数の要素を含んでいる場合、htmlメソッドは先頭要素の内容だけを取得しますが、textメソッドはすべての要素の内容を結合したものを取得します。
(2)取得する内容
名前のとおり、htmlメソッドは要素の内容をHTML文字列として取得しますが、textメソッドは純粋なテキストだけを取得します。
(3)対応する形式
textメソッドはHTML/XMLいずれの形式でも動作しますが、htmlメソッドはHTML(XHTMLを含む)形式でしか動作しません。このサンプルでは扱っていませんが、textメソッドをXML形式で利用する方法については、あらためてAjax編で紹介する予定です。
http://www.atmarkit.co.jp/fdotnet/jqueryref/02attribute/attribute_16.html
引数valには数値、もしくは「em」や「%」などの単位付きの数値を指定できます(単なる数値の場合はピクセル値として認識します)。
- height()、width()、innerHeight()、innerWidth()、outerHeight()、outerWidth()
| 関数 | padding | border-width | margin |
|---|---|---|---|
| height、width | x | x | x |
| innerHeight、innerWidth | o | x | x |
| outerHeight、outerWidth | o | o | x |
| outerHeight、outerWidth(true | o | o | o |
- attr(name, fnc) -
コールバック関数の戻り値を用いて設定。
$(function() {
$('li > img').attr(
'src',
function(index) {
return "http://www.wings.msn.to/books/" + this.id + "/"
+ this.id + "_logo.jpg";
});
});
今までjQueryを使ってきたtipsをメモします。
Tipsの定義とおり知っていればちょっと便利になるけど、
知らなくても特に問題ないですね。
ただしlive関数においてはすべてのイベントに有効じゃないのは
知っておいてほしいです。
liveはすべてのイベントに対応していない。
click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, keydown, keypress, keyup
blur, focus, mouseenter, mouseleave, change, submit
AJAXのURLではセレクタも併用できる。セレクタによりあるページの一部だけを読み込むことができる。
こんな形です:”url #some > selector”
デフォルトは”body>*”のセレクタが適用されていますよ。
$("#links").load("/Main_Page #jq-p-Getting-Started li");
:has(selector)は持ってるすべての子要素に対して動作してる
divい対して:hasフィルタを使うと、p要素までフィルタが走る
span ... p..
[filter][filter]……のように複数を連続して記述することもできます。この場合、すべての属性フィルタに合致する要素だけが取り出されます。
$(select).append("
");
$(select).append($('
このほうが簡潔だと思いますが、、
:nth-childフィルタによりn行おきに子要素を取得することができる
例えば、2、5、8行目……のように3行おきに(「3で割ったときの余りが2」番目の)要素を取得したい場合には、以下のように記述できます。
$('ol > li:nth-child(3n + 2)')
jQueryのvalidationプラグイン:showErrorを定義するとhighlightとunhighlightとは実行しない
そもそもshowErrorはエラーをどう表示するかを決めるための高レベルの関数なので、
簡略化したhighlightとunhighlightは隠蔽されたっぽいの感じで、完全に実行しません。
argumentsは配列じゃないため、配列のメソッドは
使えません。ということは本を読んだとき当たり前だと思ったんですが、
実際コードに落としたときは
自然とargument.slice()を書いちゃいました。
Array.prototype.<配列のメソッド>.call(arguments,<パラメータ>)
Array.prototype.slice.call(arguments,2)
上記の意図としてはarguments.slice(2)の表現に近いです。
ここでちょっとargumentsの基本知識を復習します。
length属性もあるし、[]でindex指定のオブジェクトを参照できますけど、
argumentsは配列に似ているオブジェクトだけです。
Technically, argumentsは予約語ではないですが、
予約語として認識してよいです。
つまりargumentsという変数は作成しないでってことです。
function foo(x){ alert(x); var arguments; arguments[0] = null; //xの値が変更されちゃう alert(x); // null が出力される }
Refers to the function that is currently being executed.
今実行中のファクションを参照しています。
function(x) { if (x <= 1) return 1; return x * arguments.callee(x-1); }
// ブラウザがIEの場合 if (window.ActiveXObject) { try { //IEのXMLHttpRequestオブジェクトを試しに生成 var xhr = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { alert('ActiveXコントロールは無効になっています'); } }