先日jQuery 1.6ãŒãƒªãƒªãƒ¼ã‚¹ã•れã¾ã—ãŸãŒã€æ¡ˆã®å®š.attr()関連ã§è°è«–ã«ãªã£ãŸã‚ˆã†ã§ã€ä¸€é€±é–“後ã«å¾Œæ–¹äº’æ›ã‚’ä¿ã¤æ›´æ–°ãŒè¡Œã‚れã¾ã—ãŸã€‚
1.6ã®æ›´æ–°å†…容ã¯å…ˆæ—¥ã®è¨˜äº‹ã‚’ã”è¦§é ‚ã‘れã°ã€‚
更新内容
jQuery 1.6ã§ã¯.prop()メソッドã®è¿½åŠ ã¨.attr()メソッドã®å¤‰æ›´ãŒã‚りã€ã“れãŒã€Œå±žæ€§ã€ã¨ã€Œãƒ—ãƒãƒ‘ティã€ã®å·®ã€åŠã³é–¢ä¿‚性ã«ã¤ã„ã¦ã®è°è«–を引ãèµ·ã“ã—ã¾ã—ãŸã€‚çµæžœã¨ã—ã¦ã€1.6.1ã§ã¯å¾Œæ–¹äº’æ›ã‚’ä¿ã¤ã‚ˆã†ä¿®æ£ã•れる事ã«ãªã‚Šã¾ã—ãŸã€‚
ã¤ã¾ã‚Š1.5.2ã‹ã‚‰ï¼ˆ1.6を飛ã°ã—ã¦ï¼‰1.6.1ã¸ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚¢ãƒƒãƒ—ã™ã‚‹éš›ã¯ã€.attr()関連ã®ã‚³ãƒ¼ãƒ‰ã¯å¤‰æ›´ãŒä¸è¦ã§ã™ã€‚
ãªãŠ.date()ã®æ–¹ã¯1.6ã®ãƒªãƒªãƒ¼ã‚¹ãƒŽãƒ¼ãƒˆã®é€šã‚Šã®å‹•作ã®ã¾ã¾ã§ã‚ã‚‹äº‹ã«æ³¨æ„ã—ã¦ãã ã•ã„。
å‰å›ž(1.6)ã§ã®.attr()ã®ä»•様
変更点ã®ã²ã¨ã¤ã«ã€.attr()ãŒå޳坆ãªå‹•作ã«ãªã£ãŸã¨ã„ã†ã‚‚ã®ãŒã‚りã¾ã—ãŸã€‚具体的ã«è¨€ã†ã¨DOMã®.getAttribute()を利用ã™ã‚‹ã‚ˆã†ã«ãªã£ã¦ã„ã¾ã™ã€‚
今ã¾ã§ã‚‚利用ã¯ã—ã¦ã„ãŸã®ã§ã™ãŒã€checked属性ãªã©ã®å ´åˆã¯è‡ªå‹•çš„ã«ãƒ—ãƒãƒ‘ティをå‚ç…§ã™ã‚‹ãªã©ã€æŸ”軟性をæŒã£ã¦ã„ãŸã®ã§ã™ã€‚ãれãŒå‰å›žã®ä¿®æ£ã§ã¯é™¤åŽ»ã•れã€ãƒ—ãƒãƒ‘ティをå‚ç…§ã™ã‚‹å ´åˆã¯æ–°ã—ãè¿½åŠ ã•れãŸ.prop()を使用ã›ã‚ˆã€ã¨ã®äº‹ã§ã—ãŸã€‚
例ãˆã°ã€ä»¥ä¸‹ã®ã‚³ãƒ¼ãƒ‰ã¯jQuery 1.6ã§ã¯æƒ³å®šé€šã‚Šã«å‹•ãã¾ã›ã‚“。
if ($(':checkbox').attr('checked')) {
alert('checked!');
}
ã“ã®ã‚³ãƒ¼ãƒ‰ã§ã¯ã€æã‚‰ã.attr()ã¯å¸¸ã«ç©ºæ–‡å—””ã‚’è¿”ã™ã§ã—ょã†ã€‚
1.6ã§.attr()を変更ã—ãŸç†ç”±
jQuery 1.6ã®Attributesモジュールã®å¤‰æ›´ã«ã‚ˆã‚Šã€å±žæ€§ã¨ãƒ—ãƒãƒ‘ãƒ†ã‚£ã®æ›–昧ã•ã‚’ãªãã™äº‹ãŒã§ãã¾ã—ãŸã€‚ã—ã‹ã—ã“れã¾ã§ã®jQueryã¯å±žæ€§ã‚‚プãƒãƒ‘ティも.attr()ã ã‘ã§ãƒãƒ³ãƒ‰ãƒªãƒ³ã‚°ã—ã¦ã„ãŸã®ã§ã€å½“ç„¶ã“ã®å¤‰æ›´ã¯jQueryコミュニティを混乱ã•ã›ã‚‹çµæžœã«ãªã£ã¦ã—ã¾ã„ã¾ã—ãŸã€‚
ã¨ã¯ã„ãˆéŽåŽ»ã®.attr()メソッドã¯å¤šãã®å•題点を抱ãˆã¦ãŠã‚Šã€ä¿å®ˆã‚‚難ã—ããªã£ã¦ã„ãŸã¨ã®äº‹ã€‚実際ã€jQuery 1.6.1ã§ã¯Attributesãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ›´æ–°ã¨åŒæ™‚ã«å¹¾ã¤ã‹ã®ä¸å…·åˆã‚‚ä¿®æ£ã•れã¦ã„ã‚‹ãã†ã§ã™ã€‚
1.6.1ãŒæä¾›ã™ã‚‹å¾Œæ–¹äº’æ›æ€§
checked, selected, readonly, disabledã¨ã„ã£ãŸbooleanåž‹ã®å±žæ€§ã¯ã€1.6.1ã§ã¯1.6よりå‰ã®jQueryã¨åŒæ§˜ã«æ‰±ã‚れã¾ã™ã€‚ã¤ã¾ã‚Šä»¥ä¸‹ã®ã‚ˆã†ãªã‚³ãƒ¼ãƒ‰ã¯ç‰¹ã«å¤‰æ›´ã‚’åŠ ãˆãªãã¦ã‚‚ã€ä»Šã¾ã§é€šã‚Šã«å‹•ãã¾ã™ã€‚(1.6ã§ã¯ã“れãŒé§„ç›®ã§ã—ãŸã€‚)
$(":checkbox").attr("checked", true);
$("option").attr("selected", true);
$("input").attr("readonly", true);
$("input").attr("disabled", true);
if ( $(":checkbox").attr("checked") ) { /* Do something */ }
.attr()ã¨.prop()ã®ä½¿ã„分ã‘
éŽåŽ»ã®.attr()を使用ã—ãŸã‚‚ã®ã¨ã€ãれãŒ.prop()ã§ã©ã†ç½®ãæ›ãˆã‚‰ã‚Œã‚‹ã¹ãã‹ã‚’ã®ä¾‹ã‚’以下ã«ç¤ºã—ã¾ã™ã€‚
| .attr() | .prop() |
|---|---|
| $(window).attr… | $(window).prop… |
| $(document).attr… | $(document).prop… |
| $(“:checkbox”).attr(“checked”, true); | $(“:checkbox”).prop(“checked”, true); |
| $(“option”).attr(“selected”, true); | $(“option”).prop(“selected”, true); |
ã¾ãšwindowオブジェクトã€documentオブジェクトã¯å±žæ€§(Attributes)ã‚’æŒãŸãªã„ã®ã§ã€ã“れã¯jQuery 1.6ã®.attr()ã§ã¯å‹•作ã—ã¾ã›ã‚“。locationã‚„readyStateãªã©ã€ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆãŒæŒã¤ãƒ—ãƒãƒ‘ティ(Property)ã¯.prop()ã‹ã€jQueryを介ã•ãªã„生ã®JavaScriptã§æ“作ã—ã¦ãã ã•ã„。ãŸã ã—å‰è¿°ã®é€šã‚Šã€ä»Šå›žã®jQuery 1.6.1ã§ã¯.prop()ã¸ã®åˆ‡ã‚Šæ›¿ãˆãŒå»¶æœŸã•れã¾ã—ãŸã®ã§ã€ç¾æ™‚点ã§ã¯ã©ã¡ã‚‰ã®ãƒ¡ã‚½ãƒƒãƒ‰ã§ã‚‚エラーã«ã¯ãªã‚Šã¾ã›ã‚“。
ç¶šã„ã¦ä»Šã¾ã§ç‰¹åˆ¥æ‰±ã„ã ã£ãŸcheckedã‚„selectedãªã©booleanåž‹ã®å±žæ€§ã§ã™ãŒã€å¼•ãç¶šã特別扱ã„ã¨ãªã‚Šã¾ã™ã€‚属性ã¨ãƒ—ãƒãƒ‘ティã®é–“ã«ç‰¹åˆ¥ãªé–¢ä¿‚ãŒã‚ã‚‹ãŸã‚ã§ã™ã€‚属性ã¨ã¯ã€ä¸€èˆ¬ã«ä»¥ä¸‹ã®ã‚ˆã†ãªã‚‚ã®ã§ã™ã€‚
<input type="checkbox" checked="checked">
checkedã®ã‚ˆã†ãªbooleanåž‹ã®å±žæ€§ï¼ˆã¤ã¾ã‚Šon/offã®çŠ¶æ…‹ã‚’æŒã¤ã‚‚ã®ï¼‰ã¯ã€åˆæœŸå€¤(default value; 属性値をçœç•¥ã—ãŸéš›ã®ã‚‚ã®)ã‹è¨å®šå€¤(initial value; HTMLã«è¨˜è¿°ã—ãŸã‚‚ã®)ã®ã¿ã‚’å–りã¾ã™ã€‚ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã®å ´åˆã€ç”»é¢ãŒè¡¨ç¤ºã•れãŸéš›ã«ãƒã‚§ãƒƒã‚¯ãŒä»˜ãã‹ã©ã†ã‹ã¯checked属性ã«ã‚ˆã‚Šã¾ã™ã€‚
åˆæœŸå€¤ã¨è¨å®šå€¤ã«ã¤ã„ã¦ã€ä»¥ä¸‹ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚
<ul> <li><input id="none" type="checkbox" /></li> <li><input id="mini" type="checkbox" checked /></li> <li><input id="full" type="checkbox" checked="checked" /></li> </ul>
$('#none')[0].getAttribute('checked'); // null
$('#none')[0].checked; // false
$('#mini')[0].getAttribute('checked'); // ""
$('#mini')[0].checked; // true
$('#full')[0].getAttribute('checked'); // "checked"
$('#full')[0].checked; // true
| 対象 | .getAttribute(‘checked’) | .checked |
|---|---|---|
| #none | null | false |
| #mini | “” (空文å—列) | true |
| #full | “checked” | true |
プãƒãƒ‘ティã¯ã€ãƒ–ラウザーãŒç¾åœ¨ã®å€¤ã‚’æ ¼ç´ã™ã‚‹ã®ã«ä½¿ç”¨ã—ã¾ã™ã€‚一般ã«ã€ãƒ—ãƒãƒ‘ティã¯å±žæ€§ã«åæ˜ ã•れã¾ã™ï¼ˆã‚れã°ï¼‰ã€‚ã—ã‹ã—booleanåž‹ã®å±žæ€§ã®å ´åˆã€ã“ã®ç‰¹æ€§ã¯å½“ã¦ã¯ã¾ã‚Šã¾ã›ã‚“。booleanåž‹ã®ãƒ—ãƒãƒ‘ティã¯ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã®ã‚¯ãƒªãƒƒã‚¯ã‚„selectè¦ç´ ã®é¸æŠžãªã©ã€åˆ©ç”¨è€…ã®æ“作ã¨åŒæœŸã—ã¾ã™ãŒã€å±žæ€§ã¯ãã†ã§ã¯ã‚りã¾ã›ã‚“。å‰è¿°ã®ã‚ˆã†ã«ã€å±žæ€§ã¯ãƒ–ラウザーãŒè¨å®šå€¤ã‚’æ ¼ç´ã™ã‚‹ã®ã«ä½¿ã‚れるã ã‘ã§ã™ã€‚
$(":checkbox")[0].checked = true;
// ã“れã¨åŒã˜â†’ $(":checkbox:first").prop("checked", true);
jQuery 1.6ã§ã¯ã€æ¬¡ã®ã‚³ãƒ¼ãƒ‰ã§ã¯ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã«ãƒã‚§ãƒƒã‚¯ã¯ä»˜ãã¾ã›ã‚“。何故ãªã‚‰ã“れã¯å±žæ€§ã®è¨å®šå€¤ã‚’変更ã—ã¦ã„ã‚‹ã ã‘ã§ã€ãƒã‚§ãƒƒã‚¯çŠ¶æ…‹ã‚’å¤‰æ›´ã™ã‚‹ã«ã¯ãƒ—ãƒãƒ‘ティã¯å¤‰æ›´ã•れãªã„ã‹ã‚‰ã§ã™ã€‚
$(":checkbox").attr("checked", true);
jQueryã®é–‹ç™ºãƒãƒ¼ãƒ ã‚‚1.6をリリースã—ãŸæ™‚ã«ã¯æ—¢ã«ã€ãƒ–ラウザーãŒç”»é¢èªã¿è¾¼ã¿æ™‚ã«ã—ã‹ä½¿ã‚ãªã„値をæ“作ã§ããŸã¨ã“ã‚ã§ä½•も便利ãªäº‹ã¯ãªã„ã¨ã‚ã‹ã£ã¦ã„ãŸãã†ã§ã™ã€‚(何故リリースã—ãŸï¼) çµå±€jQuery 1.6.1をリリースã—ã€äº’æ›æ€§ã€åˆ©ä¾¿æ€§ã®ãŸã‚引ãç¶šã.attr()メソッドã§booleanåž‹ã®å±žæ€§å€¤ã®å–å¾—ã¨è¨å®šã‚’行ãˆã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚
よã使ã†booleanåž‹ã®å±žæ€§ã¨ã„ãˆã°checked, selected, disabled, readonlyã§ã™ãŒã€jQuery 1.6.1ã¯ä»–ã«ã‚‚多ãã®å±žæ€§ã‚’.attr()ã§æ“作ã™ã‚‹äº‹ãŒã§ãã¾ã™ã€‚以下ã«ãã®ä¸€è¦§ã‚’示ã—ã¾ã™ã€‚
autofocus, autoplay, async, checked, controls, defer, disabled, hidden, loop, multiple, open, readonly, required, scoped, selected
.prop()を使ã£ãŸæ“作を推奨ã—ã¦ã¯ã„ã¾ã™ãŒã€æ—¢å˜ã‚³ãƒ¼ãƒ‰ã‚’変更ã—ãªãã¦ã‚‚ã€jQuery 1.6.1ã§å‹•ãã¾ã™ã€‚
å¹¾ã¤ã‹ã®å±žæ€§ã€ãƒ—ãƒãƒ‘ティã«ã¤ã„ã¦ã€ã©ã¡ã‚‰ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’使ã†ã¹ãã‹ã‚’以下ã«ã¾ã¨ã‚ã¾ã—ãŸã€‚一部ã®ãƒ—ãƒãƒ‘ティã¯ã€éŽæ¸¡æœŸçš„ãªæŽªç½®ã¨ã—ã¦.attr()ã§å‹•ãã ã‘ã§ã‚ã‚‹ç‚¹ã¯æ³¨æ„ã—ã¦ãã ã•ã„。
| 属性ã€ãƒ—ãƒãƒ‘ティ | .attr() |
.prop() |
|---|---|---|
accesskey |
✓ | |
align |
✓ | |
async |
✓ | ✓ |
autofocus |
✓ | ✓ |
checked |
✓ | ✓ |
class |
✓ | |
contenteditable |
✓ | |
defaultValue |
✓ | |
draggable |
✓ | |
href |
✓ | |
id |
✓ | |
label |
✓ | |
location * |
✓ | ✓ |
multiple |
✓ | ✓ |
nodeName |
✓ | |
nodeType |
✓ | |
readOnly |
✓ | ✓ |
rel |
✓ | |
selected |
✓ | ✓ |
selectedIndex |
✓ | |
src |
✓ | |
style |
✓ | |
tabindex |
✓ | |
tagName |
✓ | |
title |
✓ | |
type |
✓ | |
width ** |
✓ |
window.locationã¨ã‹ **.width()ã§ä½¿ã†ã‚‰ã—ã„
フォーãƒ
フォーム部å“ã®å€¤ã‚’å–ã‚‹å ´åˆã¯.attr()ã§ã‚‚.prop()ã§ã‚‚ãªãã€.val()を使ã†ã‚ˆã†ã«ã—ã¾ã—ょã†ã€‚ãŸã ã—ç¾åœ¨ã¯ã€ã¾ã 次ã®ã‚³ãƒ¼ãƒ‰ã§å‹•ãã¾ã™ã€‚
$text.attr("value", "any values");
ã¾ã¨ã‚
.prop()メソッドã¯booleanåž‹ã®å±žæ€§ã¨ãƒ—ãƒãƒ‘ティã€ã‚ã‚‹ã„ã¯window.locationã¨ã„ã£ãŸHTMLã§ã¯ãªã„プãƒãƒ‘ãƒ†ã‚£ã®æ“作ã«ä½¿ã„ã¾ã™ã€‚ãれ以外ã®HTMLä¸ã«å˜åœ¨ã™ã‚‹å±žæ€§ã¯ã€å¼•ãç¶šã.attr()メソッドを使用ã—ã¦ä¸‹ã•ã„。