Operaだけblockquote要素のcite属性、title属性の表示がおかしいと言ったけど、Javascript Developer ToolsとかFirebugで確認してもエラーは見られなかった(細かいエラーはあるけど、許容範囲内…だと思う)。だから一つ一つ確認しながら何がいけないのか発見してみようと思った。
以下、cite属性とtitle属性を表示させるためのJavaScriptと、一応(多分)理解している部分。
function extractBlockquoteCitations() {
var quotes = document.getElementsByTagName('blockquote');
for(var i = 0; i < quotes.length; i++) {
var title = quotes[i].getAttribute('title');
if(title !== null && title !== '') {
var p = document.createElement('p');
p.className = 'title';
quotes[i].appendChild(p);
p.innerHTML = "引用元 : "+title+"";
}
else {
var p = document.createElement('p');
p.className = 'title';
quotes[i].appendChild(p);
p.innerHTML = "引用元 : ";
}
var cite = quotes[i].getAttribute('cite');
if(cite !== '') {
var a = document.createElement('a');
a.setAttribute('href', cite);
a.setAttribute('title', title);
a.appendChild(document.createTextNode(a));
var p = document.createElement('p');
p.className = 'uri';
p.appendChild(a);
quotes[i].appendChild(p);
}
}
}
function addEvent(obj, evType, fn) {
if(obj.addEventListener) {
obj.addEventListener(evType, fn, true);
return true;
}
else if(obj.attachEvent) {
var r = obj.attachEvent("on"+evType, fn);
return r;
}
else {
return false;
}
}
addEvent(window, 'load', extractBlockquoteCitations);
とりあえずここまでが限界;それ以下の文はよく分かんない(;´Д`) 真剣に意味を調べながら書いてみると、JavaScriptって難しいのね。今までコピペしたものをちょこちょこっと整形していただけだったから。でもちょっと楽しいかも。
これだけを見ると、やっぱりfor文がおかしいような気がする。プロパティlengthは文字列の長さを取り出すプロパティ。つまり"abc.length"は3ということになる。これをfor文に当てはめると"quotes.length = 6"ってことだから、iは6未満のときに繰り返すっていうfor文で合ってるとは思うんだけど、blockquote要素って大体cite属性とtitle属性の2つ、多くてもclass属性入れて3つだと思うから、6未満、つまり5回も繰り返す必要なくね?とか言っててよく分からなくなってきた。どこか何か根本的に理解してない気がするorz
ヘルプ~(;´Д`)ノシ
アドバイスを頂きまして、opera addeventlistenerでググると幸せになれるみたいです。ユーザーJavaScriptとか?正直全然分かりませんw もうちょい勉強してから弄ることにします。Operaユーザーの人ごめんなさい。
lengthは配列の総数では?
マジすか;
文字列の長さは、プロパティlengthによって取り出すことができます。例えば、
"aab".length
は3となります。また、JavaScriptでは、全角文字(2バイト文字)もきちんと扱えますので、
"ああい".length
も3となります。
とあったので、鵜呑みにしてしまいました。これがJavaScriptの書籍は間違いだらけと言われている所以ですかね。