最新が 1.5.0_pre1 になってたので調査
Prototype.js 1.5.0_pre0 からの変更点
CHANGELOG より
Selector
Selector に属性セレクタが追加された。属性セレクタとは CSS 2.0 から導入される属性を選択条件とするセレクタである。
例
Event.observe(window, 'load', function() {
var selector;
var elements;
// style 属性を持つ要素を取得。結果「い」「う」
selector = new Selector('input[style]');
elements = selector.findElements(document);
elements.each(function(elem) { alert(elem.value) });
// type="button" 属性を持つ要素を取得。結果「い」
selector = new Selector('input[type="button"]');
elements = selector.findElements(document);
elements.each(function(elem) { alert(elem.value) });
// type="button" 属性を持たない要素を取得。結果「あ」「う」
selector = new Selector('input[type!="button"]');
elements = selector.findElements(document);
elements.each(function(elem) { alert(elem.value) });
// class 属性を半角スペース区切りにして className01 を含む要素を取得。結果「あ」
selector = new Selector('input[class~="className01"]');
elements = selector.findElements(document);
elements.each(function(elem) { alert(elem.value) });
// class 属性を半角ハイフン区切りにして class を含む要素を取得。結果「う」
selector = new Selector('input[class|="class"]');
elements = selector.findElements(document);
elements.each(function(elem) { alert(elem.value) });
// 複数の属性セレクタを指定することもできる。
// style 属性 class 属性を持つ要素を取得。結果「う」
selector = new Selector('input[style][class]');
elements = selector.findElements(document);
elements.each(function(elem) { alert(elem.value) });
});<body>
<div>
<input value="あ" type="text" class="className01 className02"/>
<input value="い" type="button" style="background-color:white;" />
<input value="う" type="submit" class="class-name-03" style="background-color:white;" />
</div>
</body>上の例を 1.5.0_pre0 で実行→ http://Sample.ECMAScript.jp/20060327-00.html
上の例を 1.5.0_pre1 で実行→ http://Sample.ECMAScript.jp/20060327-01.html
$$
Selector と同様に属性セレクタが追加された。属性セレクタとは CSS 2.0 から導入される属性を選択条件とするセレクタである。
詳しくは上を参照。
例
Event.observe(window, 'load', function() {
var elements = $$('div div[class="a"] div[class="a"]');
elements.each(function(elem) { alert(elem.innerHTML); });
});<body>
<div>
<div>
<div>あ</div><div>い</div><div>う</div>
</div>
<div class="a">
<div>え</div><div class="a">お</div><div>か</div>
</div>
<div>
<div>き</div><div>く</div><div>け</div>
</div>
</div>
</body>上の例を 1.5.0_pre0 で実行→ http://Sample.ECMAScript.jp/20060327-10.html
上の例を 1.5.0_pre1 で実行→ http://Sample.ECMAScript.jp/20060327-11.html
Ajax.Request
Ajax 系の通信時のリクエストヘッダの Accept を text/javascript, text/html, application/xml, text/xml, */* にする。
例
new Ajax.Request(
'/xml/20060327.xml',
{
method : 'get',
onSuccess : function(req){
var doc = req.responseXML;
alert(doc.documentElement.firstChild.nodeValue);
}
}
);<?xml version="1.0" encoding="utf-8"?> <content>こんにちわ!</content>
上の例を 1.5.0_pre0 で実行→ http://Sample.ECMAScript.jp/20060327-20.html
上の例を 1.5.0_pre1 で実行→ http://Sample.ECMAScript.jp/20060327-21.html
ヘッダ監視ツールで確認してください。
Element.extend
Element.setStyle や Element.update などの様々な関数が使えるようになる。かなり便利!
$ 関数や document.getElementsByClassName 関数や $$ 関数の結果は Element.extend によって Element の関数が織り込まれた状態で復帰される。
(アニメーションとかやる場合やループ中にある場合は $ 関数が重くなるので影響に注意)
例
Event.observe(window, 'load', function() {
var element = document.body;
Element.extend(element);
element.update('こんにちわ!');
element.setStyle({
'color': 'red'
});
});上の例を 1.5.0_pre0 で実行→ http://Sample.ECMAScript.jp/20060327-30.html
上の例を 1.5.0_pre1 で実行→ http://Sample.ECMAScript.jp/20060327-31.html
Element.replace
要素を文字列で置換する。
ソースの話しだが outerHTML がない環境での createRange を使った置換が興味深い。
例
Event.observe(window, 'load', function() {
$$('span')[0].replace('ばんわ');
});<body>
<div>こん<span>にちわ</span></div>
</body>上の例を 1.5.0_pre0 で実行→ http://Sample.ECMAScript.jp/20060327-40.html
上の例を 1.5.0_pre1 で実行→ http://Sample.ECMAScript.jp/20060327-41.html