+ JavaScript の質問用スレッド vol.67 +at HP
+ JavaScript の質問用スレッド vol.67 + - 暇つぶし2ch2:まず >>2-10 読め! 続いて過去スレ全集を検索!
08/10/10 14:56:33
【質問を書く上で】
1)ユーザ(閲覧者)に迷惑がかかる性悪スクリプトは回答されない。
 例: 別窓開きまくり、閉じる/戻るのを妨害、全画面占有、etcは最悪。
 答えさせようと「分からねえんだろ」と煽っても無駄(過去スレが証明)。
2)言葉でぐだぐだ書かずにソースを貼る、ただし要点を整理して。
 そのまま貼って動かせると試してもらいやすい(ただし回答者に連結さすな!)
 長い(1レスに入らない)場合はアップロードしてURIを貼る。
3)初心者という言葉は危険なので使わない方がよい。
 初心者を言い訳に自力で調べない/考えない奴が最悪に嫌われる。
4)自分で調べたこと/試したこときちんと書く(調べもしない奴は最低)。
 ただ「動きません」「エラーです」は何も情報がないため嫌われる。
 エラーは「どの行で何のエラー」を書く(ブラウザをそのように設定すれ)。
 ブラウザの設定すらできんヤシはFFxのJavaScriptコンソールを使え!!!
 OS、ブラウザ、バージョン、うまく行かない条件を明記しエラー再現可能に。
5)特に古いバージョン限定の時は必ず明記! 回答もチグハグになり回答者に2度
 手間を食わせる可能性大(現行Ver.:IE5.5-6、N6-7、Opera7-8)
6)どういう時にどういう動作をさせたいのかを脳内にとどめずきちんと書く。
 例:「自動ポップアップしたい」←どういう場合(マウスオーバー、クリック、
 ボタン押し、select選択)に何(別窓、レイヤー、その他)が出るのか書け!
7)質問はまっとうな(他人に理解できる)日本語で。
 前項の例に限らず、他人に理解できない質問文は煽られるだけで時間の無駄

3:まず >>2-10 読め! 続いて過去スレ全集を検索!
08/10/10 14:57:13
【FAQその1】
Q1. 開いた別窓/フレームの内容にアクセスできないのですが…
A1. ページ内容が別サーバの場合セキュリティ制約により絶対無理です。
Q2. JavaScriptでローカルファイルを読み/書きたいのですが…
A2. Webではセキュリティ制約により絶対無理です。できたら恐ろしいことに…
Q3. 同じタグの中でonclick="foo()"とonclick="bar()"を同時に使いたいのですが…
A3. セミコロンで複数の文を区切れます。onclick="foo();bar();"としましょう。
Q4. document.write(...)でページ内容を追加したいのですが…
A4. 一度ページ表示完了後にwrite()すると内容はクリアされちゃいます。
 部分的に内容変更するには(1)他フレーム/iframe/別窓への表示、
 (2)textarea等への表示、(3)DOMでノード挿入、(4)innerHTMLのどれかで。
 innerHTMLは非標準ですがIE、Opera、Safari、Gecko(N6/N7/Firefox等)で対応済。
Q5. table/tbody/tr要素のinnerHTMLを書き換えるのがうまく行かないのですが…
A5. IEはそれらの要素のinnerHTMLは変更不能。DOMを使って書き換えるか
 <div><table>...</table></div>とでもしてdivのinnerHTMLを書き換えましょう。
Q6. DOMでtable要素にtr要素を追加しても表示されないのですが…
A6. DOMでは(XHTML 1.x除く)tbody要素にtr要素を追加する必要があります。
 tbody要素はtbodyタグを書いていなくても自動的に作成されます。
 またはtable.insertRow()/tbody.insertRow()を使いましょう。
Q7. 変数w1、w2…を順にループで(番号をiに入れて)設定/参照したいのですが…
A7. グローバル変数はwindowのプロパティだからwindow['w'+i]を読み書きすれ。
Q8. フォーム部品名を変数にした「...myform.変数名.value」が動きません…
A8. 「document.forms.myform.elements[変数名].value」でどぞ。
 JavaScriptでは一般に「obj.x」と「obj['x']」は同じ意味です。
Q9. Aタグのonclickで動作指定してるのですが時々動きません…
A9. 「onclick="...;return false"」としないとページ移動しちゃうから。

4:まず >>2-10 読め! 続いて過去スレ全集を検索!
08/10/10 14:58:02
【FAQその2】
Q10. CSSで設定した背景色がe.style.backgroundColorで取得できないのですが…
A10. 取得には document.defaultView.getComputedStyle() を使う必要あり。
 IEでは要素オブジェクトのプロパティcurrentStyleを使う。
Q11. 100*1.15の結果が114.999…998となってしまうのですが…
A11. コンピュータの実数計算は全て近似値だと思え。誤差が嫌なら整数で計算。
Q12. 任意のデータをサーバ(別鯖ではない)から取り寄せたいのですが…
A12. IE7/Gecko/Opera/Safariのnew XMLHttpRequest()、IEの
 new ActiveXObject("Msxml2.XMLHTTP.6.0") (または"Msxml2.XMLHTTP.3.0")
 を使えばできます。古いブラウザだと隠しフレームに読むなどのワザが必要。
Q13. setAttribute("class","foo")、setAttribute("onclick","bar()")が動きません…
A13. IEではそれは不可。「obj.className="foo"」「obj.onclick=bar」でどぞ。
 複数の関数を呼びたいときは obj.onclick=function(){foo();bar();};
 という風に無名関数を作りましょう。中に書かれたコードが実行されます。
Q14. タイマーやイベントハンドラに設定するコードにthisを含めたいのですが
 「"...this..."」とか「function(){...this...}」ではうまく行きません。
A14. それらが実行されるときはthisは別のもの(window等)を指してしまってる。
 「function(x){return function(){...x...};}(this)」のようにthisを別の変数に
 束縛しその変数を使って。循環参照によるメモリリーク問題あり(この項記述検討中)
Q15. 文字列の置き換えをするときにコードを使いたい(Perlのs///e)のですが…
A15. string.replace(/.../,function(str,p1,p2,...,offset,s){...})としましょう。
 正規表現にマッチした文字列がreturnで返された文字列に置き換えられます。
 各引数はstrがマッチした部分文字列、p1,p2,...が1番目、2番目、…の()の中身、
 offsetがマッチした位置、sが置き換え前の文字列全体になります。
Q16. input type="file"の値を設定(参照)できないのですが…
A16. セキュリティ制約のため設定は絶対に不可。参照はブラウザにより不可。
Q17. getElementById('ID名')や$('ID名')で要素が取れないのですが…
A17. コード実行時点でHTMLがそこまで読まれてない。onload中でやるとか。

5:まず >>2-10 読め! 続いて過去スレ全集を検索!
08/10/10 14:59:27
【主張の対立:他人の嗜好は尊重。損得の議論は歓迎】
・仕様を読む:回答者なら仕様の該当部分は読んでいるべき。質問者でも
 仕様を読まずうだうだ書く奴は注意されて当然。読み間違いは生温く指摘。
・英文文書:翻訳の努力を惜しむべからず。 読めないなら和訳を探し、
 なければあきらめよう。翻訳サイトを知っている人はうまく誘導してあげて。
・IE専用/アンチIE/クロスブラウザ:「○○は不要」「○○だけであと
 は無視」は不毛。質問者が分かって選択していれば尊重する。無知か
 らIE専なのは指摘してあげると親切。
・標準準拠 vs 使えればよい:標準はブラウザが変わっても維持される
 可能性大。非標準機能も損得を分かった上で使うならよい。
・MS vs アンチMS:MS固有の情報はMSのサイトで見ないと分からないが、
 そこだけ見ているとIE専になる。あとは上2件と同様。
・別窓、イベント抑止など:一般には迷惑スクリプトだが質問者に正当
 な理由があることも。尋ねて分かってないようなら煽っても可(w
・innerHTML vs DOM:それぞれに長所/弱点があるので理解した上で選
 択するべき。一概にどちらは駄目、とは言えない。
・on属性 vs addXXX():ハンドラが1つだけと分かっていればon属性
 で簡単にハンドラを設定もあり。上書きが心配ならaddXXX()。

6:Name_Not_Found
08/10/10 15:17:39
ECMA-262 ed.3
URLリンク(www.ecma-international.org)
URLリンク(www2u.biglobe.ne.jp) (和訳)
W3C Document Object Model Technical Reports
URLリンク(www.w3.org)
JavaScript 1.5 ガイド / リファレンス (Netscape/Mozilla)
URLリンク(developer.mozilla.org) (和訳)
URLリンク(developer.mozilla.org)
URLリンク(developer.mozilla.org) (和訳)
E4X (ECMAScript for XML)
URLリンク(www.ecma-international.org)
URLリンク(www.ne.jp) (和訳)
Mozilla Gecko DOM Reference, Netscape devedge
URLリンク(developer.mozilla.org)
URLリンク(developer.mozilla.org) (和訳)
URLリンク(devedge-temp.mozilla.org)
MSDN Library JScript / DHTML (現在日本語版は古杉)
URLリンク(www.microsoft.com)
URLリンク(msdn2.microsoft.com)

7:Name_Not_Found
08/10/10 15:18:32
【チュートリアルサイト・サンプルサイト】
規格が読めないならまずはチュートリアル。サンプルサイトも沢山ある。
(とほほは間違いが多いためこのスレでは批判的意見が多い)
(以下は精選すべきとの議論あるが進んでいないので玉石混淆)
MetaGraphic Cell
URLリンク(www2u.biglobe.ne.jp)
どら猫本舗のリファレンスカウンター
URLリンク(www.doraneko.org)
はぎさんちのページ Mozilla's DOM Sample Project
URLリンク(cgi.din.or.jp)
オブジェクトなJSの基礎講座
URLリンク(chaichan.web.infoseek.co.jp)
【関連スレ】
板違い、スレ違いに注意!サーバ側での処理はWebProg板へどぞ!
Webサイト制作初心者用質問スレ Part 202
スレリンク(hp板)l50
CSS /* CSS・スタイルシート質問スレ 上級者用【71th】 */
スレリンク(hp板)l50
CSS/DHTMLバグ辞典スレッド 【第5版】
スレリンク(hp板)l50
役に立つ書籍は? 4冊目
スレリンク(hp板)l50
JavaScript手取り足取りスレッド
スレリンク(hp板)l50
1行javascriptプログラミング
スレリンク(hp板)l50
WSH(・∀・)スレッド! Part 3
スレリンク(tech板)l50

8:Name_Not_Found
08/10/10 19:20:27
  >>1
      `・+。*・     (´・ω・`)
        。*゚  。☆―⊂、  つ 
      。*゚    :     ヽ  ⊃
      `+。**゚**゚       ∪~

9:Name_Not_Found
08/10/11 00:21:46
>>1(・ω・`)乙 これはポニテがうんたらかんたら

10:Name_Not_Found
08/10/11 13:16:59 mqs5DpPU
早速ですがCで言うところのexit()みたいな
実行を停止する関数や制御文のようなものはありますか?
リファレンスでそれっぽいのを見付けられませんでした
throw、return辺りが使えるのでしょうか

if(!a) {
 statement
}

これを下みたいに書きたいのです

if(a) exit
statement

11:Name_Not_Found
08/10/11 13:32:54
>>7
イタタタタタタタタタタタタタタタタタタタタタタ

12:Name_Not_Found
08/10/11 13:37:33
>>10
if(a) return;
statement


13:Name_Not_Found
08/10/11 14:29:50
ありがとうございます
一番上のブロック(?)でもreturnが使えるんですね

14:Name_Not_Found
08/10/11 14:41:00
つかえないよ

15:Name_Not_Found
08/10/11 15:41:02
設計から見直せ

16:Name_Not_Found
08/10/11 17:49:23
グローバルスコープでreturnとか

17:Name_Not_Found
08/10/11 18:03:45
どこに返るんだよっていう

18:Name_Not_Found
08/10/11 18:08:19
釜山?

19:Name_Not_Found
08/10/11 19:32:34
前スレ994です
994-995さんレスありがとうございました。

20:Name_Not_Found
08/10/12 00:11:02
帰る家がない(´;ω;`)

21:10
08/10/12 05:51:19
使えませんでした…
ですがどうやらexitで終わるみたいです
IE、Firefoxで使えるならリファレンスにちゃんと書いといて欲しい…

>>15
分岐によってstatementの量が極端に違う場合少ない方を
ネストの深い方に入れてインデントを減らすコーディングは
設計と関係無いような…

22:Name_Not_Found
08/10/12 06:29:53
エー、ちゃんと終わるの?構文エラーではなく?

23:10
08/10/12 06:48:08
returnだとスクリプト全体が実行されませんが
exitだと実行されます
未定義関数や他の名前を書いても終わるのでエラーぽいです

24:10
08/10/12 07:11:59
ちなみに

var t=new Date()
var h=t.getHours()
if(6<=h && h<18) exit
document.write('<link rel="stylesheet" href="hoge.css" />')

というコードを書きましたが6時前にはスタイルシートが適用され
6時以降は適用されなくなりました
今後の実装がどうなるかわからないので
趣味の範囲でなら未定義関数を終了と考えて良さそうです

25:10
08/10/12 07:43:22
エラーコンソール見たらexit is not definedて出てました
止めといた方が良さそうですねorz
しかし終了できないプログラミング言語って
止まれない車と同じくらい危険な気が…

26:Name_Not_Found
08/10/12 08:19:15
>>25
まあなんでも書き方次第だよ

27:Name_Not_Found
08/10/12 09:49:35
あほじゃないの。自分がやらせたい動作全体を1つの関数
にして最初にそれを1回呼び出すだけにしておけば、その中で
returnを使えば終わりにできるでしょ。その程度の構造の
工夫もできないんじゃ向いてないよ。

28:10
08/10/12 09:52:32
アホなんでネストが何段にもなってるとこんがらがっちゃうんですよね
終わったことは早く忘れてしまいたいというか

function hoge(){
 if(b) return
statements
}

if(a) hoge()

みたいな書き方すれば1段で抑えられそうですね

29:10
08/10/12 09:58:49
>>27
頭悪いのはその通りですけど
一部の頭の良い人しか使えないプログラミング言語ってどうなんですか?
上り坂で減速するテクニックがあれば車にブレーキ要らないですか?

30:Name_Not_Found
08/10/12 10:44:33
ここの人たちに何言っても無駄だから突っかかんの止めな
万人向けのプログラミング言語なんてないし、嫌なら使うなって話

ココ行け
JavaScript 手取り足取りスレッド
スレリンク(hp板)

31:10
08/10/12 10:58:52
誘導ありがとうございます
アホな初心者でもわかるようなことを偉そうに煽られたもんで
つい反応してしまいました

32:Name_Not_Found
08/10/12 11:03:38
window.moveBy() って
IE専用?

33:Name_Not_Found
08/10/12 11:23:06
<button onclick="aaa.value = '1'; submit();">osu</button>
aaaはhidden項目のnameです。
firefoxだとエラーになってしまうのですが、firefoxに対応するにはどう書けばいいのでしょうか。

34:Name_Not_Found
08/10/12 12:07:13
>>33
onclick="this.form.elements.aaa.value='1'; this.form.submit()"

35:Name_Not_Found
08/10/12 12:08:41
何段にもなってこんがらがらせる方が悪いと思うが、
内側の関数から例外をthrowして最外側でその例外をcatchして
普通に終わるようにすれば機械的に変換できると思うな。

36:Name_Not_Found
08/10/12 14:14:26
グローバルスコープにだらだら書き連ねるような幼稚な設計を見直せと言っているのに

37:Name_Not_Found
08/10/12 22:50:15
prototype.js ってどうなの。jQueryと比べて

38:Name_Not_Found
08/10/13 14:06:23
どうと言われてもな

39:Name_Not_Found
08/10/13 19:02:44
斜め読みでも雰囲気は分かるはずだからまずは読めばいいよ

40:Name_Not_Found
08/10/14 01:55:22
event.explicitOriginalTarget - MDC
URLリンク(developer.mozilla.org)

のanonymous contentとは何ですか?
無名のコンテント?

41:Name_Not_Found
08/10/14 14:12:58
>>40
anonymous contentでぐぐって勉強すれば。

42:Name_Not_Found
08/10/14 14:49:11
解答率低すぎて質問スレとして機能してねえw

43:Name_Not_Found
08/10/14 16:02:40
prototype.jsはプログラムの書けない人が使うものですか?

44:Name_Not_Found
08/10/14 16:06:37
はい

45:43
08/10/14 16:58:39
じゃ習うのやめます。やれ、やれとうるさい人がいるもので。
ありがとうございました。

46:Name_Not_Found
08/10/14 17:27:38
そんなことねーよ

47:Name_Not_Found
08/10/14 20:15:41
prototype.js と他のライブラリ(JSON.js)を併用していて問題が発生しました。

突き詰めると、eval を delete した後に eval を読み込むと
Object の拡張が消えてしまうというものです。(FireFox2 でのみ再現)
どなたか、原因や解決法にお心当たりはないでしょうか?

伝わり辛いと思いますので、以下にサンプルコードを付します。
Array について同様の拡張を行った場合には、この問題は起こりませんでした。

<html><body>
<script language="JavaScript">
<!--

Object["newFunc"] = function(){};

alert(Object.newFunc);   //* 正常に function(){} と表示される

delete eval;

alert(Object.newFunc);   //* 正常に function(){} と表示される

eval;

alert(Object.newFunc);   //* undefined と表示されてしまう (FF3, IE7 では正常に function(){} と表示される)

alert(eval("1+2"));     //* 正常に3と表示される

//-->
</script>
</body></html>

48:Name_Not_Found
08/10/14 21:35:49
なんでevalをdeleteする必要があるのか?

49:47
08/10/14 22:02:00
>>48

詳細は分からないのですが、どうやら

> safe and native code evaulation (ライブラリのコメントより抜粋)

を行うためのようです。

つまり、他のコードで eval が上書きされていると都合が悪いので、
一旦 eval をデリートすることで、eval の内容を剥ぎ取っているようです。

ちなみに、実際のライブラリのコードは以下のようになっています。

e=eval;                      //* 元々の eval を待避
delete eval;
if (typeof eval === "undefined")eval=e;  //* ←ここで質問の内容の問題が起こる
f=eval(""+c);
eval=e;                      //* 退避した eval を元に戻す
return f;

(ホントはダメなんだろうけど、行数制限でライセンスコードは割愛.
MIT license の元で Copyright (C) 2007 Andrea Giammarchi - www.3site.eu 名義で公開されているコードです)

50:Name_Not_Found
08/10/14 22:05:52
>>47
バグなんじゃね?
3で直ってるなら問題ないと思う

51:Name_Not_Found
08/10/14 22:06:53
リロードしてなかった

52:47
08/10/14 22:32:51
>>50

こんな使われているソフトにもバグは有るんですね。
ちょっと意外です。(まだバグ確定ではないかも知れませんが)

>3で直ってるなら問題ない

普及度の高いブラウザには対応したいな~と思ってましたが、
よくよく調べてみると、もうFireFox2のシェアって6%切ってるんですね。

なんとなくモヤモヤは残りますが、
ひとまず、現実的には乗り切れそうな気がしてきました。


ありがとうございます。


(他の皆様、もし更に具体的にご存知の事がありましたら、引き続きよろしくお願いします)

53:Name_Not_Found
08/10/15 13:29:10
cookieというのはスタンダロンでも使えますか?自分用に使いたい
のですが。よろしくお願いいたします。

54:Name_Not_Found
08/10/15 14:53:50
>>53
いまいち。出直しておいで

55:Name_Not_Found
08/10/15 18:44:55
>>53
他のブラウザは知らんけど、Firefox3ならデフォルトで、
/D:/foo/bar/
などとファイルが置かれているディレクトリがパスになりcookie登録/参照可能。

56:Name_Not_Found
08/10/16 10:02:02
すいません。コードの中でJScript objectを指定するように、という
エラーが出るのですがどんなことが考えられますか?ラインは当て
にならなくてどの部分かよくわかりません。

57:Name_Not_Found
08/10/16 10:08:54
>>56
とりあえず落ち着いて>>1を読んでこい

58:56
08/10/16 10:33:09
>>57さま
回答ありがとうございます。1を3回読んでみましたが解決しませんでした。
よろしくお願いします。

59:Name_Not_Found
08/10/16 10:35:08
>>58
なら今度は>>1を理解してからこい

60:Name_Not_Found
08/10/16 10:37:40
マジレスまがいのレスするからつけ上がるんだボケ

61:Name_Not_Found
08/10/16 10:39:38
>>60
いつもの人をからかってるだけなんだからマジレスで水を差すなよ

62:Name_Not_Found
08/10/16 11:20:18
>>56
そのエラーが出る最小限の例題を作って貼って。
作る能力がないならこのスレはあなたのためのものではない。

63:56
08/10/16 12:13:00
>>62さん
親切なお答えありがとうございます。自分で見つけてやってみます。
少しはヒントなりいただけるかなと思ったのですが、残念です。

64:Name_Not_Found
08/10/16 13:03:53
>>62の意味もわかってないとか・・

65:Name_Not_Found
08/10/16 13:16:44
ダメだこりゃ

次いってみよー

66:Name_Not_Found
08/10/16 13:32:18
>>63
とりあえずエラーが出る自分のコードをコピペして貼ったらいいよ。って>>62は言ってるのね。
口で説明してもよくわからないから。
エラーとは関係ない部分は削ってコード貼れば大抵誰かが教えてくれる

67:Name_Not_Found
08/10/17 00:40:37
質問です。

function extend(sub, sup){
 var F = function(){};
 F.prototype = sup.prototype;
 sub.prototype = new F();
 sub.prototype.constructor = sub;
 sub.superclass = sup.prototype;
 if(sup.prototype.constructor == Object.prototype.constructor){
  sup.prototype.constructor = sup;
 }
}

これは継承のためのユーティリティ関数ですが、if文のところだけが理解できません。
そもそもこれは何をやっているのかがよく分からないのですが、
私の理解ですと、ある特殊な場合にスーパークラスのコンストラクタを自身に設定するということのようです。
この理解が正しいかは分からないです。
このif文の意味を教えてください。お願いいたします。

68:Name_Not_Found
08/10/17 01:02:33
>>67
うーんたぶん。sup.prototypeにプロパティを設定するときに

function Sup() { ... }
Sup.prototype.method1 = ...; // (1)
Sup.prototype = { method1 : ... }; // (2)

(1)の方法なら自動的に Sup.prototype.constructor == Sup になるが、
(2)のようにオブジェクトを代入してしまうとその条件に当てはまりますね。

69:67
08/10/17 04:06:43
>>68 ありがとうございます。

デフォルトではfunction Foo(){}のように宣言したとき、
Foo.prototype.constructor==Foo
になるけど、Foo.prototypeにオブジェクトを代入してしまうと、
Foo.prototype.constructor==Object
になりますね確かに。
勉強になりました。


function Sup(){}
function Sub(){}
Sup.prototype = {
  method1: function(){alert(10)},
};
extend(Sub,Sup);
var o = new Sub();
o.method1(); // 10
var p = new Sup();
alert(p.constructor == Sup); // true

extend内のif文がないと最後の行でfalseになりますね。

70:Name_Not_Found
08/10/17 22:39:32
正規表現を使って、
xmlファイル中の<Url>http:~~</Url>のhttp:~~の部分を取り出して、
配列に格納したいのですが、以下の正規表現ではうまくいきません。
ご指摘お願いします。

var url_list = source.match(/<Url>(.+?)</Url>/g);
ちなみに、変数sourceはString型で、そこにxmlが書かれています。


71:Name_Not_Found
08/10/17 22:46:45
エスケープせなあかんとちゃいまっか。gもいらん。

72:70
08/10/17 22:58:12
ご指摘ありがとうございます
エスケープってのは特定の文字を置換することですよね。
もう少し頑張ってみます。

73:Name_Not_Found
08/10/18 00:47:41
エスケープってのは特別な意味を持つ文字を普通の文字として使うってこと
タグ内の /(スラッシュ) をエスケープしてないから
/<Url>(.+?)</Url>/ が /<Url>(.+?)</ で終わってる

だから /<Url>(.+?)<\/Url>/
\を付けるとエスケープできる。ただこれじゃ望み通りの結果は得られんだろうけど。

74:Name_Not_Found
08/10/18 10:41:50
サブマッチ使えばできるけど
折角XML形式になってるのに、何故DOMを使わないのかと
XMLの意味がない

75:Name_Not_Found
08/10/18 14:28:26 cTQJu4p+
【質問】 js内にある、多次元連想配列を、サーバー側に送る際の形式について
【状況】 Postで、送ろうと思っていますが、何も考えず送ってみた所、[object Object]となり、そっかオブジェクトだ…と困っています。

全然、解決策が見えないのです… どたなかお知恵を下さい
よろしくお願い申し上げる;;


76:Name_Not_Found
08/10/18 14:36:58
>>75
サーバ側でどう使いたいか不明だけど、とりあえず JSON 形式にエンコードしてみれば?

77:Name_Not_Found
08/10/18 14:42:43 AF3+wTrX
>>75
多次元連想配列を文字列にエンコードしてサーバに送って、
サーバでデコードしたらいいんじゃない?

文字列化の方法としては、
・JSON形式
公式サイト URLリンク(www.json.org)
実装例 URLリンク(ditio.net)
・XML形式(実例はよく知らない)
用例 URLリンク(www.virtual-tech.net)
なんかが一般的なんじゃないかと。

この2つなら、JavaScript、サーバ側言語(PHPなど)のどっちでも、
エンコード/デコード用のライブラリが公開されているだろうし。

78:Name_Not_Found
08/10/18 15:17:44
>>76 >>77
なるほど。確かに文字列ですね。
XMLよりも、jsonに馴染んでるので、jsonにしてみます。

ライブラリも発見してみました。試してみます。

本当にありがとうございました

79:Name_Not_Found
08/10/19 22:22:47 gRo9N6p6
'2ch.net'.match(/^2ch\.net$/) が null になるんだけど、何故か分かりますか?

リテラルの中の.を\でエスケープしてる(つもり)部分が問題になってるんだけど、
エスケープの仕方が違うのでしょうか?
'2ch.net'.match(/^2ch.net$/) だと2ch.netが返ってくるけど、
当然ながら'2chxnet'.match(/^2ch\.net$/) もマッチするんですよね。
お手元の環境で再現するかだけでも教えて頂けると嬉しいです。

当方macのFirefox3.0.3、safari3.1.2、Opera9.6でダメでした。

80:79
08/10/19 22:26:18 gRo9N6p6
>>79
> 当然ながら'2chxnet'.match(/^2ch\.net$/) もマッチするんですよね。

> 当然ながら'2chxnet'.match(/^2ch.net$/) もマッチするんですよね。
の間違いです。すいません。

81:Name_Not_Found
08/10/19 22:32:18
>>79
Fx3.03では2ch.netにマッチする

82:Name_Not_Found
08/10/19 23:06:24
バックスラッシュを入力したつもりがIMだかエディタだかの都合で円記号になってたりしないよな?

83:Name_Not_Found
08/10/19 23:44:52
Fx2.0.0.17でも2ch.netにマッチしたよ

84:79
08/10/20 00:27:45 BoxSCXfb
>>82
流石にそれはないです。

みなさんありがとうございます。当然マッチしますよねぇ。
うーん、なんなんだろう。

85:79
08/10/20 00:42:05 BoxSCXfb
>>82
あぁ、すいません。どうやら円記号が原因だったみたいです。
こういう場合どうすればいいんでしょうか。

86:79
08/10/20 01:04:25 BoxSCXfb
option+¥(半角)キーで\ですね。MS以外のUnicode環境では気をつけないとダメですね。
皆さまありがとうございました。

87:Name_Not_Found
08/10/20 12:43:14 8cRDKNUU
tooltip.jsでのポップアップに関する質問です。
現在、以下のようになっていますが、ポップアップする画像の
位置をマウスの右上に変更したいのですが、どうしたらよろしいでしょうか?

現在の様子のサンプル
URLリンク(www.geocities.jp)
「aaaaaaa」のところにスクリプトが適用されています。

88:Name_Not_Found
08/10/20 13:24:19
>>87
tooltip.jsをどこからもってきたのかよくわからないけど、
表示する位置はその中にべた書きしてあるから作者に要望出してみたら?
それか自分でxとかyをいじれば色々変えられるし

89:Name_Not_Found
08/10/20 13:27:02 7Z5AQA80
>>86
逆じゃん?当方、Macで10年ちかくJS書いているけど、
普通にチルダの右のキー → バックスラッシュ
Opt + チルダの右のキー → Yen記号
だと思う。

>>87
なにがわからないのかを書かないと。
まるっと作ってほしいのなら手取り足取りスレへ。

90:87
08/10/20 15:02:12
>>88
ということは表示位置の変更はcssではなく、
.jsの方をいじる必要があるということですね?

>>89
表示位置変更のために、cssのpositionやtop、leftといった部分の値の変更
をしていたんですが、上手くいかず解決法も分からなかったので質問させて
いただきました。
誘導案内どうもです

91:Name_Not_Found
08/10/20 16:13:22
tooltip.js内の51,52行目の
y = mouseY(e) + 16;
x = mouseX(e) - (ew / 4);

y = mouseY(e) + 35 - ew;
x = mouseX(e);
にしたらマウスの右上辺りにくるよ

ただ、単に数値合わせただけだから
windowWidthとかoffsetWidthとかの意味がなくなるけど

92:87
08/10/21 15:47:57
>>91
ありがとうございます!
やはり.js内のその辺が表示位置合わせに関連してくるのですね。


93:Name_Not_Found
08/10/21 17:02:38
729 名前:Name_Not_Found[] 投稿日:2008/10/20(月) 08:43:32 ID:SH1zPud3
JavaScriptでとっても滑らか!画像切替のシンプルな技
URLリンク(ascii.jp)

こういうのってJavascriptをわざわざ使う必要あんのか?

94:Name_Not_Found
08/10/21 18:56:23
>>93
発言の真意が、
1. エフェクト不要
2. Flashを使え
のどちらかは知らんが、"適度"なエフェクトには価値があるだろ。
こんな軽い効果では、無効な環境では全く表示されないFlashよりも、
とりあえず画像は表示されるJavaScriptで実現した方が良いのは確かだし。

95:79
08/10/22 02:11:01 Wjx9Fs/I
>>89
すいません。10年やってる人に恐縮ですが、
ことえりだと環境設定で¥と\の使い分けが設定できるので、
逆とかじゃなくて設定の違いだと思いますよ。

96:Name_Not_Found
08/10/22 19:17:29
jspでデータベースからデータを取ってきて格納した配列をjavascriptでも同じように変数として扱いたいのですがどうすればいいでしょうか?

jspではtitleとhonbunは配列で

<form name="form_title">
<input type="hidden" name=title value="<%= title %>" >
</form>

<form name="form_honbun">
<input type="hidden" name=honbun value="<%= honbun %>" >
</form>

このように名前をつけ、javascriptでは

var taitoru[]= document.form_title.title.value;
var honbun[]= document.form_honbun.honbun.value;

このように変数に代入しています

jsp側ではSPANでオンマウス時にjavascriptを呼び出し、javascriptでは文字が配列のhonbun[0]等をポップアップした枠の中で表示させるようにさせたいのですが
枠そのものがポップアップしません

上記のjavascriptでの変数への代入部分をコメントアウトすると、枠自体は表示されます

配列を丸ごとjavascriptで配列に代入できないのであれば、1データずつ引き継ぐという方法でもいいのですが、どのようにjavascript側で代入すればいいのでしょうか?


97:Name_Not_Found
08/10/22 19:25:45
こういうサーバーサイドの言語での配列やオブジェクトを
JSに直接渡そうとする質問が定期的に出てくる理由が分からない

98:Name_Not_Found
08/10/22 19:36:12
全部同一人物だと思えばスルーしたくなってくるだろ?

99:Name_Not_Found
08/10/22 21:19:29 gv4QIdNy
URLリンク(javascript123.seesaa.net)
コレを導入しようとしているんですが、
ページを開いた時点でチェックボックスが空なのに内容が表示されてしまいます。
サンプルはきちんと動くのに、コピペしただけの自分のところで動かない理由が良く分かりません・・
ヘルプお願いします。

100:Name_Not_Found
08/10/22 21:24:43
俺は全く問題なかった。
サンプルコピペで動かないなら動作環境ぐらい書けよ。

101:Name_Not_Found
08/10/22 21:47:24 gv4QIdNy
PHPの中に書き込んでIEでプレビューしてます。

最初チェックはずれてるときは表示されてて、
一度チェック入れてはずすと消えます。
次チェックすると出てきます

102:Name_Not_Found
08/10/22 22:13:27
>>99
>>1
どこが分からないのか説明できないなら手取り足取りスレへ

103:Name_Not_Found
08/10/22 22:37:11 gv4QIdNy
了解です。 移動します。

104:Name_Not_Found
08/10/22 22:46:09 gv4QIdNy
display:none; 付けるのを忘れていただけみたいです。
CSSのコピペを忘れていました。

105:Name_Not_Found
08/10/22 22:53:39
コピペもできないってどういうことなの?プンプン

106:Name_Not_Found
08/10/23 10:12:17
DOMchange的なイベントって搭載されているブラウザってどれですか?
例えばFirebugってドキュメントツリーが変わった時にそれが反映されて表示されますよね。
そういったことを自分のアプリでやりたいと考えてます。

107:Name_Not_Found
08/10/23 11:42:05
ドキュメント読み込み完了後にスクリプトから!importantなスタイルを適用するにはどうしたらいいですか?
ただし、あらかじめ用意したCSSファイルを適用するのではなくて、動的にCSSルールを生成して適用するものとします。
試しに、elem.style.background = '#ccc !important'; をボタンクリックで実行させたところ、Fx3では何も変化がありませんでした。

108:Name_Not_Found
08/10/23 17:39:22
>>106
CSSのexpression使ってやる方法どこかで見た気がしたなあと思ってググったらあった
URLリンク(d.hatena.ne.jp)
これで要求を満たしてるのかどうかよくわからんが

109:106
08/10/23 18:47:30
>>108 これは面白い方法ですね。確かにこれでいけそうです。ありがとうございます。
Firebugのソースざっと見てみたんですが、ちょっとすぐに分かりそうになかったので、また時間が出来た時に見てみます。

110:Name_Not_Found
08/10/23 23:15:48
質問です。

1.
XPathを使って、title属性を持つdivを抽出したいと思っていまして、今は
//div[@title]
という指定で抽出しているのですが、この表記は間違っているのでしょうか?
一応抽出できてはいるのですが、title="hoge"だとかそういった指定しか見かけなかったので…

2.
href属性の中にURLが書いてあるとき、
そのURLのdomainを抽出する方法を教えてください。
document.domainで今見ているサイトのドメインはとってこれますが、
任意のURLのドメインを抽出することはできるのでしょうか?

よろしくお願いします。

111:Name_Not_Found
08/10/24 00:04:20
>>106 >>108
DOMNodeInserted、DOMSubtreeModifiedとか。Firefox限定だけど。

>>110
正規表現じゃだめ?

112:Name_Not_Found
08/10/24 00:07:39
divにappendChild(p)して
そのpの中にaを付け加えたいんですが
どうやってpを取得すればいいですか?
お願いします


113:Name_Not_Found
08/10/24 00:10:50 Y49ehIFq
>>112
よく分からない質問だな。appendChild(p)するということは
そのpは変数とかに入っているんだよな。ということは今更
取得も何もないと思うが(変数に入ってないのならappendChild()
するときに入れればいいと思うし)。

114:Name_Not_Found
08/10/24 00:12:49
なるほど
aを持つpを作ってからそれをappendChildすればいいんですね
ありがとうございます


115:Name_Not_Found
08/10/24 00:18:07
逆でもいい

116:Name_Not_Found
08/10/24 02:03:10
ExplorerCanvas(excanvas.js) について質問です。

現在excanvasを使用してIE6へ描画処理をさせようと思っています。
このexcanvasを使用した描画処理について自分なりに調べてみたのですが、
以下の二点が分かりませんでした。

・画面上に引ける線の種類は実線のみか?
・画面に文字を表示したいが、直接表示できないため、
 canvasでは「画像で表示」、又は「div要素を絶対座標を使用して表示」となっていた。
 これはexcanvasでも使用できるか?

線種は、折れ線グラフをcanvasに表示していたサイトがあり、
そこで水平補助線の線種を点線・破線・実線から選んでいました。
これはグラフで使用しているからこれらの線を引けるのであって、
実際にcanvasに描けるのは実線のみ、ということでよいのでしょうか?
(できれば点線・破線が引きたいです)

文字表示ですが、現在のブラウザではcanvasの文字表示は対応していないようです。
この場合、canvasでは上記の「画像使用」、「div要素を座標表示」で代用できるらしいとなっていましたが、
これはcanvas同様excanvasで使用できるのでしょうか?
(excanvasでの使用制限でひっかからないか?)

よろしくお願いいたします。

117:Name_Not_Found
08/10/24 05:52:33
>>111
正規表現を考えてみたところ、
サブドメインを判断するのが難しそうなのですが、
何か参考になるようなサイトはないでしょうか。
よろしくお願いします。
また、正規表現以外の方法でも構いませんので引き続きよろしくお願いします。

118:Name_Not_Found
08/10/24 09:15:38
>>117
"正規表現" "URL抽出" に一致する日本語のページ 約 2,300 件中 1 - 10 件目 (0.09 秒)

答えを求めているように見えるけど、もう少し自分で調べような

119:Name_Not_Found
08/10/24 16:23:03
URLじゃなくてドメイン抽出だろとつっこんでみるテスト

120:Name_Not_Found
08/10/24 18:15:43
再帰処理について質問です。

ある文字列を1文字単位で並び替えて全ての組み合わせを生成するプログラムを途中まで作ったのですが詰まりました。
処理速度を最も軽くするにはどう書けばいいでしょうか?

生成する結果は1文字~任意文字数の全ての組み合わせで、以下の順番で生成します。




ああ
あい
あう
いあ
・・・・・
あああ
ああい
ああう
あいあ
・・・・・

121:120
08/10/24 18:16:19
<html>
<head><script language="JavaScript"><!--
var txtData = 'あいう';          //任意文字列
var n = 2;                   //任意文字数
var t = txtData.length;
var k = 0;
var txtArr = txtData.split('');
var list=new Array();
function test(i){
  if( i<n ){
    if( i>0 ){
      var txt = txtArr[k];
      k=k+1;
    }else{
      var txt = '';
    }
    for( var j=0; j<t; j++ ){
      list.push( txt + txtArr[j] );
    }
    if( i>0 && k<t ){
      test(i);
    }else{
      k=0;
      test(i+1);
    }
  }
  return list;
}
//--></script></head>
<body onLoad="document.body.innerHTML=test(0).join('<br>');">
</body>
</html>

122:Name_Not_Found
08/10/24 18:48:11
気軽に「最も」とかいうなよ

123:Name_Not_Found
08/10/24 19:12:54
もっともだ

124:Name_Not_Found
08/10/24 19:21:41
(ht|f)tp(s)?:\/\/([\w-~\.]+?)\/

125:120
08/10/24 19:51:52
>>122
ご自分の感覚でかまいませんので、
よろしくお願いします。m(_ _)m

126:Name_Not_Found
08/10/24 20:50:14
JSでやる以上再起処理という時点で「最も軽い」という要件を満たさない気がする

127:Name_Not_Found
08/10/24 22:11:01
>>126
JSでやる上で「最も軽い」でしょ

128:Name_Not_Found
08/10/24 22:17:59
>>127
分盲乙

129:Name_Not_Found
08/10/24 23:11:22
>>128
文盲乙

130:Name_Not_Found
08/10/24 23:37:08
再帰なんて要らんだろそもそも。ホレ。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
</head><body>
<pre><script type="text/javascript">
function gen(txt, n) {
var l = 0, a = [''];
while(l <= n) {
var b = [];
for(var i = 0; i < a.length; ++i) {
for(var j = 0; j < txt.length; ++j) {
var s = b[b.length] = a[i] + txt.charAt(j); document.writeln(s);
}
}
a = b; ++l;
}
}
gen('あいう', 8);
</script></pre>
</body></html>

131:Name_Not_Found
08/10/24 23:55:22
appendChild('a')だと、親要素の中にaを追加できますが
中ではなくて、親要素の直後に追加したい場合はどのようにすれば良いのでしょうか


132:Name_Not_Found
08/10/25 00:05:47
nextSibling insertBefore

133:Name_Not_Found
08/10/25 00:10:54
>>127
JSは関数呼び出しのコストが高くつくから速度が必要なときに再帰でやるのは悪手という常識

134:Name_Not_Found
08/10/25 00:13:53
JS、板違い
ここはJavaScript

135:Name_Not_Found
08/10/25 00:22:31 4ixLRwLT
ボタンを押すと、特定の画像の現在の座標を取得できるような方法を教えてください

136:Name_Not_Found
08/10/25 00:42:02
特定の画像のオフセット + その親要素のオフセット + その親要素の…

と遡って全部足せばいい。

137:Name_Not_Found
08/10/25 01:05:51
>>136
それだとブラウザのバグ絡みで不味くなかったっけか

138:Name_Not_Found
08/10/25 03:23:52
ブラウザによってダメなのがわけわからない

139:120
08/10/25 03:38:12
>>130
レスありがとうございます。
繰り返しを使った方法は知っていましたが再帰の勉強中でして、
できれば再帰を使った方法をお願いしたいです。m(_ _)m

140:120
08/10/25 03:39:54
>>126
他の言語での処理が早いのは知ってる。

141:Name_Not_Found
08/10/25 03:46:58
>>127,129,140
>>126はJavaScriptで再帰処理すると速度的に不利になるよと言ってるんだよ

142:120
08/10/25 05:05:54
>>141
今は他言語との比較を問題にしている訳ではないのだが?

143:Name_Not_Found
08/10/25 05:44:04
>>142
頭のめぐりが悪そうなので丁寧に書いてやろう

JavaScriptの再帰はループに比べて遅いので速度がほしいときはループで書け
他言語との比較とか誰も問題にしてねえよカス

144:Name_Not_Found
08/10/25 06:05:23
再帰処理の勉強がしたいだけなので、パフォーマンスは関係ないって話じゃないのか。

145:Name_Not_Found
08/10/25 06:19:04
処理速度を最も軽くするにはどう書けばいいでしょうか?

146:Name_Not_Found
08/10/25 06:33:03
>>142
こいつは・・・w

147:Name_Not_Found
08/10/25 08:20:35
>>139
アンタが指定した順番(幅優先順)は再帰と相性が悪い。わざわざ適して
ない問題に再帰を使おうとするというのはセンスを疑うけどね。
しかしなぜ皆ごたくばかりでコード書かいてみせない?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
</head><body>
<pre><script type="text/javascript">
var out = [];
function gen(cur, txt, m, n) {
if(!out[m]) out[m] = [];
for(var i = 0; i < txt.length; ++i) {
var s = cur + txt.charAt(i); out[m].push(s);
if(m < n) gen(s, txt, m+1, n);
}
}
gen('', 'あいう', 0, 7);
for(var i = 0; i < 7; ++i)
for(var j = 0; j < out[i].length; ++j) document.writeln(out[i][j]);
</script></pre>
</body></html>

148:Name_Not_Found
08/10/25 08:56:22
宿題じゃね?

149:Name_Not_Found
08/10/25 11:42:08
画像ビューアーを作っています
Imageオブジェクトについて質問です

window.onload = function (){
 url="C:\\test.txt";
 url="C:\\test.jpg";
 objnowimage = new Image();add_log("imageオブジェクト作成");
 objnowimage.src=url;add_log("url設定");
 log.src=objnowimage.src;add_log("url表示");
 objnowimage.onload=function(){add_log("onload");};
 objnowimage.onerror=function(){add_log("onerror");};
}
function add_log(msg){
 info.value=msg+"\n"+info.value
}

このサンプルの二つのurlのファイルはどちらも0バイトの空ファイルです
url="C:\\test.jpg";の時はちゃんとadd_log("onerror");が返ってくるのに、url="C:\\test.txt";の時はonload、onerrorどちらも返ってきませんので
画像でないファイルの時に完全に止まってしまうので困っています
javascrptで、そのファイルが有効な画像ファイルかを調べるを教えて下さい
環境はvista+IE7です
サンプルコードには書いてませんが、completeプロパティも最後までfalseで役に立ちませんでした

150:Name_Not_Found
08/10/25 12:51:16
質問ですが、次の上がtrueで下がfalseになる理由は何ですか?
両方ともオブジェクトなので参照型なので同じ扱いになるのではないんでしょうか?

function f(){
var r = /a/;
return r;
}
var x = f(), y = f();
alert(x == y); // true

function g(){
var o = {x:2};
return o;
}
var x = g(), y = g();
alert(x == y); // false

151:Name_Not_Found
08/10/25 12:57:55
>>150
正規表現リテラルはオブジェクトを1つだけ作ってあとはそれを
使いまわす。オブジェクトリテラル(ではなく正式にはオブジェクト
式)はそこを実行するたびに新しいオブジェクトを生成する(だから
リテラルではないわけだ)。

152:Name_Not_Found
08/10/25 13:02:31
>>149
>objnowimage.src=url

これは一番最後にしたら?


153:Name_Not_Found
08/10/25 13:14:22
>>152
一番最後にすると、何故かobjnowimage.onerror=function(){add_log("onerror");};
}が作動してしまいました
onloadは作動しなかったのに

そのほかアレコレ順番を変えてみましたが、結果は変らずでした

154:150
08/10/25 13:17:51
>>151
なるほど!

var o = {x:2}

var o = new Object();
o.x = 2;
の簡易表現と考えたらいいんですね。

一方
var r = /a/;
は、
var r = new RegExp('a');
とは違うので、>150のfをこれで書き換えると

function f(){
var r = new RegExp('a');
return r;
}
var x = f(), y = f();
alert(x == y); // trueでなくfalse!

となりますね。

ありがとうございます。

155:Name_Not_Found
08/10/25 13:24:08
>>151
function f(p)  {
  var r = /a/;
  r.p = p;
  return r;
}
var x = f("a"), y = f("b");
alert( x.p );
alert( x == y );

こういう風にしたらブラウザで結果が割れたんだがECMA的には後者が正しいんでしょうか?
IE6, Safari3
  x.p: "a"
  x == y: false
Fx3, Opera9.5, GC0.2
 x.p: "b"
 x == y: true

156:Name_Not_Found
08/10/25 13:29:19
>>153
onerrorが作動するのは正しい動きじゃないの?

157:Name_Not_Found
08/10/25 14:25:18
質問です。メンバが見つかりませんと出るのですがど
ういう原因が考えられますか。IE6-SP2を使用です。

158:Name_Not_Found
08/10/25 14:26:29
ハア???

159:Name_Not_Found
08/10/25 15:06:45
これはまた・・・・レベルの高い質問だな

160:Name_Not_Found
08/10/25 16:11:41
メール欄

161:Name_Not_Found
08/10/25 16:14:20
>>155
URLリンク(www2u.biglobe.ne.jp)
を読む限り、rは同じオブジェクトを参照するべきである
(後者が正しい)ように思えますね。

162:Name_Not_Found
08/10/25 16:41:01
>>143
文盲乙

釣りじゃなければレスをもう一度見ろやカス

163:Name_Not_Found
08/10/25 17:23:06
>>161
ありがとうございます。

>走査時に RegExp オブジェクトに変換される
>プログラムまた関数の評価の開始前に生成される
>それは新規オブジェクト生成はしない

この部分を解釈するとやっぱりそうなるんですかね。
しかし解り難い・・・

164:Name_Not_Found
08/10/25 19:27:32
>>162
おいおい、いまさら「再帰を使った方法をお願いしたい」まで巻き戻すのかよ

165:Name_Not_Found
08/10/25 20:49:47
昨日の今日で何が「いまさら」だよw

166:Name_Not_Found
08/10/25 22:04:52
>>165

こいつアスペルガー症候群じゃね?

167:Name_Not_Found
08/10/25 22:15:05
負け惜しみ乙www

168:Name_Not_Found
08/10/25 23:13:25
ところで、>>130>>147 の所要時間を計測してみたんだけど、
手元のノートPCのFxで 2400msec .vs. 340msec と再帰版が
圧倒的に速かった。もちろん出力まで含めての時間ね。
再帰が遅いとかわめいてた人たち、>>147 より速いの書いてみて
くんないかな。無駄口を叩き合うより優れたコードで競う方が
有意義でしょ?

169:Name_Not_Found
08/10/25 23:17:24
>>168
>>1

170:Name_Not_Found
08/10/25 23:20:24
いやだから、>>130>>147 の作者なんだけど。
まあ2ちゃんだから信用しないというのなら勝手だが。

171:Name_Not_Found
08/10/25 23:28:19
負けるなホレ氏。

172:Name_Not_Found
08/10/25 23:35:05
それで >>130>>147 の作者だけど、もう1つ書いてみた。
でもこれも1000msec と再帰版より遅い。やっぱ再帰版が最強なんでは?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
</head><body>
<pre><script type="text/javascript">
function gen2(a, n) {
var m = a.length, limit = Math.pow(m, n);
for(var i = 0; i < limit; ++i) {
var x = i, s = '';
for(var k = 0; k < n; ++k) {
s = a[x % m] + s; x = Math.floor(x / m);
}
document.writeln(s);
}
}
var t1 = new Date().getTime();
for(var j = 1; j <= 8; ++j) gen2(['あ','い','う'], j);
var t2 = new Date().getTime();
document.writeln(t2 - t1);
</script></pre>
</body></html>

173:Name_Not_Found
08/10/25 23:51:54
それで >>130>>147>>172 の作者だけどもう1つ書いた。
これも780msec と再帰版より遅いね。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
</head><body>
<pre><script type="text/javascript">
function gen3(a, n) {
var m = a.length, limit = (Math.pow(m, n+1)-1)/(m-1);
var out = [''], p = 0, q = 1;
while(q < limit) {
for(var i = 0; i < m; ++i) out[q++] = out[p] + a[i];
++p;
}
return out;
}
var t1 = new Date().getTime();
var a = gen3(['あ','い','う'], 8);
for(var i = 1; i < a.length; ++i) document.writeln(a[i]);
var t2 = new Date().getTime();
document.writeln(t2 - t1);
</script></pre>
</body></html>

174:nanasi
08/10/26 01:57:49 EVWZmOp/
JavaScript がオフになっているかどうかはどうすればわかりますか?

175:Name_Not_Found
08/10/26 02:32:15
<noscript>JavaScriptがオフだよ お兄ちゃん!</noscript>

176:Name_Not_Found
08/10/26 03:13:06
<div class="hoge">
<h2 class="header">Example<h2>
<div class="script">
<script type="text/javascript">
(function () {
あんなことこんなこと
})();
</script>
</div></div>

↑こういう構造で、下の無名関数から<h2>タグをstyle="display:none;"にすることは可能でしょうか?
div.hogeが閉じる前だから無理なような気もするし、
h2.headerはすでに閉じてるから可能のハズって気もするんですが。
可能ならどうやればいいんでしょうか?
ご教示お願いします。

177:Name_Not_Found
08/10/26 03:22:24
(function () {
document.getElementsByTagName("h2")[0].style.display = "none";
})();

h2 は閉じてるから問題ない

178:Name_Not_Found
08/10/26 03:25:52
このあたりの話か
URLリンク(d.hatena.ne.jp)

179:Name_Not_Found
08/10/26 03:49:58
>>177-178
こんな時間に即レスありがとう。
html内のh2タグの数が不確定なんで>>177のままでは無理だったけど、
>>178も参考にして、↓にしたらうまくいきました!

(function () {
document.getElementsByTagName("h2")[document.getElementsByTagName("h2").length - 1].style.display = "none";
})();

180:Name_Not_Found
08/10/26 06:08:42
1,2,3,4,5,...とあるボタンを、Allというボタンを押すと順番に全てを押すような動きをさせたいのですが、どうしたらいいでしょうか

181:Name_Not_Found
08/10/26 06:40:37
>>180
Allのときに1,2,3,4,5への呼び出しメッセージを送る。
多分順番に届く。


182:Name_Not_Found
08/10/26 07:24:20
IEでのマウス座標の取得関数についてなんですが、
(A) DHTMLクックブックではleftの部分だけ取り出すと、
coords.left = e.clientX + document.body.scrollLeft - document.body.clientLeft;
if(document.body.parentElement && document.body.parentElement.clientLeft){
 var bodyParent = document.body.parentElement;
 coords.left += bodyParent.scrollLeft - bodyParent.clientLeft;
}
(B) 一方、JavaScript Cursor PositionURLリンク(hartshorne.ca)
では、
cursor.x = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
となっています。
どちらが正しいですか?(私はどちらも間違いだと思いますが、長くなるのでとりあえず根拠は省いて皆さんの意見を待ちたいと思います)

ポイントとして、
・e.clientXはクライアント領域の座標値なので、コンテンツのスクロール値を足すことで、ページ内の座標に変換する必要があります(基本)
・スクロール値は、standard modeの時は、document.documentElement.scrollLeftで、quirks modeの時は、document.body.scrollLeftです。
・ここまでは、(A)(B)とも同じです。違っているのはclientLeftを引くことによる微調整の部分です。
(A)は、document.body.clientLeftとdocument.documentElement.clientLeftを引いています。
それに対して、(B)はdocument.documentElement.clientLeftだけを引いています。
・当たり前のことですが、document.body.parentElementとdocument.documentElementは同じです。

細かな点として、
・document.body.clientLeftはbody要素のleft-borderです。
element.clientLeft - MDC
URLリンク(developer.mozilla.org)

・(B)によるとstandard modeのIEではクライアント領域の右上端が(2,2)になるような座標系でe.clientXを測っていることを発見したとのこと。
これは、document.documentElement.clientLeftがstandard modeの時に2になるのと符合します。
・また、Windows環境でウィンドウを最大化した場合には、IEに限らず右上端が(2,2)になります。ただし、Operaでは右上端が(0,0)です

183:182
08/10/26 10:50:05
半ば自己解決したので、報告します。Bが正解に近いという結論です。
これは何を持って正しい座標系とするかの問題なので答えなど存在しないとも言えそうです。

以下の考察では簡単のためスクロールは無いものとします。また、動作の確認にはIE7を使用しました。

●座標系を5つ定義します。
(1) (B) e.clientX - document.documentElement.clientLeftをx座標値とし、y座標値も同様に計算する座標系。この座標系で(x,y)の座標になる点をB:(x,y)のように書くことにします。以下同様。
(2) (A) e.clientX - document.documentElement.clientLeft - document.body.clientLeftをx座標値(ry A:(x,y)
(3) position:absoluteでtop:0px: left:0px;な点を(0,0)とする座標系。 ab:(x,y)
(4) e.clientX, e.clientYを座標値とする座標系。 cl:(x,y)
(5) 右クリックでコンテンツの右クリックメニューが出る最も左上端を(0,0)とする座標系。 con:(x,y)

●standard modeでは、
・cl:(2,2) = con:(2,2) = B:(0,0) = ab:(0,0)
・A:(0,0)はbodyのborderがある限り別の点。しかも何ら特徴のない点。
例えば、bodyのmargin-left-widthが10px, border-left-widthが20pxの時、A:(0,0)はbodyのボーダー内の点。
つまり、standard modeでは(A)のDHTMLクックブックの座標系は役に立ちません。

●quirks modeでは、
・cl:(0,0) = con:(0,0) = B:(0,0) ← bodyのborderの外辺であり、表示部の左上端。
・ab:(0,0) = A:(0,0) ← bodyのborderの内辺
bodyのborderが0pxなら両者は同じ点になります。

●以上のことから、「e.clientX, e.clientYの値からクライアント領域の左上端を(0,0)と見た座標系での値へと変換するには」、
Bの方法が適切だと考えられます。
Bの方法はやってることは簡単なことで、基本的にe.clientX/Yの値をそのまま使いますが、standard modeの時は2(document.documentElement.clientLeft/Topの値)を差し引いて補正します。

184:182
08/10/26 10:57:07
言い忘れてましたが、Windows環境ではウィンドウを最大化すると、standard modeで右上端がcl:(0,0)となります。
つまり、clientX/Yが2未満な領域に移動すると、コンテンツの右クリックメニューは出てこなくなります。

以上のように私は考えましたが、今回検索しまくったら、DHTMLクックブックの方法を結構見かけました。
bodyのborderはデフォルトでは0pxだし、あったとしても少ない値なのであまり問題が表面化しないとは思いますが、
(B)の方法のほうがタイピング量も少ないですし、より正しい方法であるように思いました。
何か私の見落としていた点や間違いがあれば補足お願いします。

185:Name_Not_Found
08/10/26 13:28:20
すいません 質問です

URLリンク(www.dhw.ac.jp)
このサイトの下ににある、このページの先頭へのリンクをクリックすると
普通は一気に上までいくけど
なんでこのサイトのはゆっくり上がるんだろ?
どんな技術使えばこんなになるの?なんかいいな

186:Name_Not_Found
08/10/26 13:53:49
>>181
どう描けばいいでしょうか

187:Name_Not_Found
08/10/26 14:15:43
>>185 clickハンドラ内でscrollByをsetInterval。

188:120
08/10/26 15:41:12
>>147
レスありがとうございます。
順番を無視すればより早くなるかもしれませんが、整頓して出力する方法を探していたもので。
適するかどうか以前に再帰をよく知らなかったので勉強になりました。
ありがとうございました。m(_ _)m

ちなみに、私のノートでも再帰を使ったほうが倍近く早いです。
これは繰り返し文を使うと遅くなるという事でしょうか。^^;

189:Name_Not_Found
08/10/26 16:33:33
データバインドでソートできるテーブルで、セルに交互に背景色を付けて見やすくしたいのですが、
var elem = "TR";
window.onload = function() {
if(document.getElementsByTagName) {
var el = document.getElementsByTagName(elem);
for(var i=0; i<el.length; i++) {
if(el[i].childNodes[0].tagName != "TH"
&& el[i].parentNode.parentNode.className.indexOf("tbl") != -1) {
if(i%2 == 1) {
el[i].className = "on";
} else {
el[i].className = "off";
}
}
}
}
}
これでは初期状態では思い通りになっているものの、ソートをすると色が戻ってしまいます。
ソート後も色を維持できる方法があればご教授下さい。

190:Name_Not_Found
08/10/26 17:14:07
>>187
おーありがとうございます
ぐぐったら出てきました
勉強してきます

191:Name_Not_Found
08/10/26 20:52:24 iJZnswBP
メールで注文する計算フォームを修正していますが動いてくれません。
コードはサンプルページを参考に記述しました。
どこが間違ってるでしょうか?
ページを下記へアップしました。
URLリンク(uproda11.2ch-library.com)

メール送信を最終的にしたいので借りているCGIのフォーム設定に原因があるのかと
思ったりしましたが。分りません。


192:Name_Not_Found
08/10/26 21:02:13
>>191
<FORM>がないのに</FORM>があるじゃん

つうかここで質問するようなことじゃないだろ


193:191
08/10/26 21:08:43 iJZnswBP
すみません、そこは削除してしまいましたが実際はあります。
が、やはりここで聴くことじゃないですか?

194:Name_Not_Found
08/10/26 22:17:25
>>193
>>1
 一、自ら学んでJavaScriptコードを書く意思を持つ者
 一、質問を分かる日本語できちんと説明できる者

最初の文面にCGIと出ているのでURLは開いていませんが、
HTMLまたはCGIの内容と思われるのでここではスレチと言う事になります。

195:191
08/10/26 22:42:00 iJZnswBP
>>194 
そっか。そうですよね。すみませんでした。
レスありがとう御座いましたm(_ _)m

196:Name_Not_Found
08/10/26 23:06:25
>>189
URLリンク(www.makoto3.net)

データバインド懐かしいな。
昔は結構便利でよく使っていたけど、IE専用だったのがネックだったな。
PHPが普及してからは全く使わなくなってしまった。

197:Name_Not_Found
08/10/27 00:04:20
JSでMath.rint()はどう書けばいいの?

198:Name_Not_Found
08/10/27 00:21:18
Math.round

199:Name_Not_Found
08/10/27 01:48:06
>>196
見逃していました、ありがとうございます

CGIやSSIが使えないサーバーで、頻繁に更新するファイルを、
極一部の身内での利用に重宝しています

200:Name_Not_Found
08/10/27 08:33:50
DOMノードの属性を全て取得するにはどうしたらいいですか?

hasAttribute()で特定の属性を持つか判定したり、getAttribute()で特定の属性の値を取得できますが、
ノードの属性はDOMノードのプロパティから取得できるとは限らないので、for-inでは取得できません。

201:Name_Not_Found
08/10/27 09:02:43
DontEnumが付いてるのは列挙できない
(俺が知らないだけで抜け道はあるのかも)

列挙するためのライブラリとか読むとDontEnumがついてそうなメンバの名前を持っておいて、
それが存在するかどうか一つ一つ確かめているみたい


202:200
08/10/27 09:22:26
>>201
DontEnum属性がついてると列挙できないのは分かるんですが、
DOMノードの場合ですとそもそも属性がプロパティになっているとは限らないですよね。
例えばHTML DOMの場合は全てのHTML属性に対して、その属性名をキャメライズした名前のプロパティを持ちます。
しかし一般のXMLの場合は、全ての属性がプロパティから取得できるとは限りません。
そんな場合に全ての属性を取得するにはどうしたらいいでしょう?

203:Name_Not_Found
08/10/27 09:38:28
>>202
element.attributesでNamedNodeMapが返ってくる
てかDOMの仕様書読め

204:200
08/10/27 09:52:29
>>203
ありがとうございます。これからは仕様書読むようにします。

205:Name_Not_Found
08/10/28 15:12:56
javascript+cssでつまづいているのですが

function ch(chsrc) {
document.getElementById("zoom").src=chsrc;
}

<div class="bigImg">
<img src="photo/04.jpg" id="zoom" />
</div>
<img src="photo/02.jpg" class="small" onClick="chsrc(this.src)" >
<img src="photo/03.jpg" class="small" onClick="chsrc(this.src)" >

上記コードで#bigImgに対してfloat:leftを効かせると
IE6(MultipleIE)で動作しなくなってしまいます。
float:leftを切ると実行できます。
仕方ないのでTableでレイアウトしたところ、
それでも無理でした。
CSSによってJavascriptの動作に制限がかかることが
あるのでしょうか?

わかる方がいらっしゃればヒントをお願い致します。


206:Name_Not_Found
08/10/28 16:37:30 8Nu1VnzO
二日間ぶっ通しであれこれやっているのですが、らちがあかず質問します。
eucで書かれたサイトで別のページをXMLHttpRequestで読んで加工して出力したいのですが・・・、
その別のページというのは現状で手をつけること(XMLに変更するなど)はできません。

質問1.
responseTextの内容をXMLのようにパースできるようなライブラリ等はないでしょうか?

質問2.
仮に上の質問でライブラリが無いとした場合、正規表現で処理しようと思うのですが、
eucの日本語にマッチしてくれません。
responseTextの中の日本語にマッチさせる方法まないでしょうか?

IEオンリーの処理でかまいません。
ご存知の方、お知恵を拝借できますでしょうか?



207:Name_Not_Found
08/10/28 16:49:10
>>205
通常のIE6では動作する。

ところで
class="bigImg"なのに
#bigImgに対してfloat:leftを指定しても意味はない。

function ch(chsrc)なのに
onClick="chsrc(this.src)"これでは動作するわけがない。

208:Name_Not_Found
08/10/28 16:55:08
>>206
Document.loadXML()では駄目?

209:Name_Not_Found
08/10/28 17:09:39
responseXML は空なのか

210:Name_Not_Found
08/10/28 17:39:04
選択をキャンセルしたいんですが下記のように
onchangeイベントでfalseを返しても変更前の
値に戻らないのですがonbeforechangeみたいなイベントは
無いものでしょうか?

<select name="hoge" onchange="return changeHoge();">
<option value="hoge1">hoge1</option>
<option value="hoge2">hoge2</option>
<option value="hoge3">hoge3</option>
</select>


211:Name_Not_Found
08/10/28 17:47:32 8Nu1VnzO
206です。

208>>
Document.loadXML()とは・・・なんでしょう?

209>>
だめでした・・・。
中に何も入ってないです。

なにかいい方法がないでしょうか・・・。



212:Name_Not_Found
08/10/28 18:02:30
>>211
昔ちょっと調べたことがあるけど、responceXMLは読込先のページのContent-TypeがXMLと判断できないと空になるみたいだね
別ページに手をつけられないとなると難しいな

responceTextをそのままalertかテキストファイルに書き出したら文字化けしてるんじゃないかな
読込先のcharset指定が無かったり異常だったりするとXMLHttpRequestはutf-8扱いしてしまうんで
読込先がeucやsjisで書かれていると文字化けしちゃう
その場合は文字コードをあわせてやらなきゃいけない

213:Name_Not_Found
08/10/28 18:16:46
>>206
CGIを裏で動かしてプロキシにした方が解析もできるしいいと思うんだけど無理?
JavaScriptで解析とか重くなりそうだけど。

>>210
どういうこと?
changeHogeがどういうことする関数かわからないんだけど、
選択をキャンセルするどのタイミングでどうやると起こるわけ?

214:Name_Not_Found
08/10/28 18:46:38
>>211
208も言ってるように普通loadXMLを使う。

>>210
onchangeは、変わってしまってから発生するイベントだからreturn falseしても無駄。
onchangeするたびに変わった値をpreviousValueという変数に格納すればいい。

215:Name_Not_Found
08/10/28 19:27:01 8Nu1VnzO
211です。

>>214
なるほど・・・と思ってやってみたけどだめなんですよね・・・。

var domObj;
try{
if(window.ActiveXObject) {
try{
domObj =new ActiveXObject("Msxml2.DOMDocument");
}catch(e){
try{
domObj =new ActiveXObject("Msxml2.DOMDocument.3.0");
}catch(e2){
try{
domObj =new DOMDocument;
}catch(e3){}
}
}
}
else
domObj =null;
}catch(e4){}

if( !domObj ) return;

domObj.loadXML( targetContents );
alert( domObj.getElementsByTagName('table').length )

----------------------------------------------------------
出力:0


216:Name_Not_Found
08/10/28 19:52:23 8Nu1VnzO
211です。

上のエラーメッセージは"テキストの内容に無効な文字が見つかりました"
でした。
がっくし・・・。


217:Name_Not_Found
08/10/28 21:58:10 XUCuP6no
いきなりですが、質問です。

たとえば2択のラジオボタンをJQueryのclone()を使って増やすと、FireFoxでは問題なく全て
別々のグループ(name=)で作られるのに、IE7だと全部同一グループとして扱われてしまいます。

ためしにクローン用のラジオボタンからname属性を消すと、IE7では選択不能な状態に。
どうもIE7ではname属性の書き換えができていない模様です。

似た症例が過去に無いでしょうか?
素直にCGI使った方が良いのだろうか?

218:Name_Not_Found
08/10/28 22:04:37
>>217
意味不明。再現可能なミニマムコードを提示してくれ。

219:Name_Not_Found
08/10/28 22:10:49 8Nu1VnzO
206,211です。

>>212
書き込み見落としていました。

なるほど、
やはり読込先に手を付けないとだめですか・・・。

まいったな、それができないんですよね・・・、
なんかいい方法ないかな・・・。


220:217
08/10/28 22:27:52 XUCuP6no
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"URLリンク(www.w3.org)">
<html xmlns="URLリンク(www.w3.org)" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="jquery-1.2.6.js" type="text/javascript"></script>
<script src="test.js" type="text/javascript"></script>
</head>
<body>
<div id="radiobase">
<input type="radio" id="radid1" name="rgrp" value="1"/>
<input type="radio" id="radid2" name="rgrp" value="2"/>
</div>
</body>
</html>

221:217
08/10/28 22:28:12 XUCuP6no
// test.js
jQuery.noConflict();
var $ = jQuery;
$(function(){
$(window).ready(function(){
for(var i=0; i<10; i++){
var aaa = $("#radiobase").clone().removeAttr("id");
aaa.find("#radid1").attr("name","rgrp"+i).removeAttr("id");
aaa.find("#radid2").attr("name","rgrp"+i).removeAttr("id");
$("#radiobase").before(aaa);
}
});
});

222:217
08/10/28 22:29:15 XUCuP6no
>>218
>>220-221に即席サンプルアップしました。
IE7とFFでラジオボタンの挙動を比べてみて。

223:Name_Not_Found
08/10/28 22:32:30 8Nu1VnzO
206,211,219です。

>>212

>読込先のcharset指定が無かったり異常だったりするとXMLHttpRequestはutf-8扱いしてしまうんで
>読込先がeucやsjisで書かれていると文字化けしちゃう

metaで指定しててもだめのようですね。
XMLHttpRequestはhttpヘッダの中のcontent-typeとcharsetで内容を判断してるみたいです。
現状httpヘッダにcharsetは吐かないようにしてるからutf-8と思ってるようです。

だめだこりゃ、あきらめました。


224:217
08/10/28 22:39:52 XUCuP6no
>>217でname属性の書き換えができていない模様と書きましたが
DebugBarで確認したらしっかり書き変わってました。
もしかしてIE7の不具合?

225:Name_Not_Found
08/10/28 23:08:03
>>224
jQeuryは知らんけどこういう不具合があるよん
URLリンク(www.tagindex.com)

226:217
08/10/28 23:24:50 XUCuP6no
>>225
ものすげー有益な情報、超サンクス!!!
やっぱりIEの不具合か、おかげで解決。

具体的には以下のコードで対応可能。
アホっぽいけど、複製じゃなくて生成しろってことだな・・・。

jQuery.noConflict();
var $ = jQuery;
$(function(){
$(window).ready(function(){
for(var i=0; i<10; i++){
$('<input type="radio" name="rgrp'+i+'"/>').attr('value',1).appendTo('body');
$('<input type="radio" name="rgrp'+i+'"/>').attr('value',2).appendTo('body');
$('<br />').appendTo('body');
}
});
});

227:Name_Not_Found
08/10/28 23:38:23 DCyLLWdN
nicEditのいじりかたについて聞きたいのですがココでいいですか?

228:Name_Not_Found
08/10/28 23:52:20
そんなもんわざわざいじるくらいなら
HTMLタグ打ちを勉強した方が良いかと

229:Name_Not_Found
08/10/29 00:52:15 xl6MBZyt
webアプリ作るためにも必要で・・
「クエリ送信」の文字を置き換える方法が知りたいのですが

230:Name_Not_Found
08/10/29 01:01:30
>webアプリ
>webアプリ
>webアプリ
>webアプリ

勝手に改変して利用して、
自作ですって公開するのは著作権に抵触するよ
自分で一からJavascript学んで出直してきなさい

231:Name_Not_Found
08/10/29 02:18:36
そろそろライブラリに関する質問をどうにかした方がいいと思う

232:Name_Not_Found
08/10/29 02:38:37
「クエリ送信」て type="submit" のデフォルトの文字列のこと?
nicEdit とも関係ないような

233:Name_Not_Found
08/10/29 05:05:42
>>230
ちなみにNicEditはMITライセンス。
>自作ですって公開
ってのは明らかに真っ黒だけど、
元の著作権表示を行うなら勝手に改変して公開しても全く問題無し。

234:Name_Not_Found
08/10/29 07:45:28 IWnl6Gf3
バブリング?やevent delegation?辺りのクロスブラウザ対応の質問になると思うのですが、

<div style="position:absolute;width:100px;height:100px;"><a href="URLリンク(google.com)">button</a></div>
<div style="position:absolute;width:100px;height:100px;">A</div>
<div style="position:absolute;width:100px;height:100px;">B</div>

このように同じサイズのブロック要素でレイヤ構造を組んだときに、
IEは最背面ブロックの<A>のボタンの"utton"辺りはクリッカブル、
IE以外は最前面以外のレイヤーは完全に無反応という違いが出ますが、
IEの挙動をIE以外の環境で再現する方法論はありますでしょうか。

235:212
08/10/29 11:39:13
>>223
やっぱり文字化けしてるのかな

var Stream = new ActiveXObject("ADODB.Stream");
Stream.Open;
Stream.Type = 1;
Stream.Write(domObj.responseBody);
Stream.Position = 0;
Stream.Type = 2;
Stream.Charset = "euc-jp"; //別ページの文字コードがわからんから、適宜変更して
alert(Stream.ReadText);

responceTextじゃなくて
こんな感じでresponseBodyからエンコードしてやるといいんじゃないかな

236:Name_Not_Found
08/10/29 11:57:13
>>214
できました。ありがとう。

237:Name_Not_Found
08/10/29 14:58:45
どうしたアホ外人、出番だぞ

238:Name_Not_Found
08/10/29 15:47:48 +jnOtkwV
質問です。
オンマウスでメニューツリーを表示したいのですが、
あるサイトを参考にして
親メニューは画像にして、オンマウスで違う画像に変え、
下に子メニューを持ってくるようにしました。
この親メニューを複数使いたいのですが、
どこを変えたらいいのかわからないです。

<SCRIPT type="text/javascript"><!--
function showMenu1(menu1,menu2){
document.getElementById(menu1).style.display = 'none';
document.getElementById(menu2).style.display = 'block';
}
--></SCRIPT>
<STYLE type="text/css"><!--
#M1A { display: block;}
#M1B { display: none;}
*/--></STYLE>

<DIV id="M1A" onMouseOver="showMenu1('M1A','M1B')"><img src="通常の画像"></DIV>
<DIV id="M1B" onMouseOver="showMenu1('M1A','M1B')" onMouseOut="showMenu1('M1B','M1A')"><img src="オンマウスで表示の画像">
<DIV>
<A href="">子メニュ1</A><BR>
<A href="">子メニュ2</A>
</DIV>
</DIV>

idの部分を変えるんだろうとは思うのですが、
アドバイスお願いします。

239:Name_Not_Found
08/10/29 16:21:06
idと引数

240:Name_Not_Found
08/10/29 19:16:17 bBMTwy3L
同じblogパーツが貼られているサイト間をリンクするタイプのblogパーツがありますが、
URL取得の仕組みがわかりません。
リファラーから取って来ているのか??
大まかな仕組みを教えて頂けないでしょうか?
Flashスレで聞く内容でしたらすみません。。。

241:Name_Not_Found
08/10/29 20:14:02
スレチ

242:238
08/10/29 20:55:02
>>239
ありがとうございます。
引数というヒントで答えに辿りつけました。
感謝します。

243:Name_Not_Found
08/10/29 23:26:19
すいません。objectタグのDOMなんですが

<html>
<head>
<title></title>
<script language="javascript" type="text/javascript">
function test(){
document.getElementById("box").data="2.PNG";
alert(document.getElementById("box").data);
}
</script>
</head>
<body>
<input type="button" value="push" onclick="test()"/>
<object id="box" data="1.PNG" width="200px" height="300px">
</body>
</html>

でボタンを押すとIE以外のブラウザではobjectで埋め込まれている
画像が変わります。(IEは変わりませんが、
alert警告では「2.PNG」と表示されます。)

divとかでobjectを囲んで丸ごと入れ替えるという方法はうまくいったのですが
IEでobject の埋め込みデータの中身だけを変える方法はないのでしょうか。
もしあったら教えてください。お願いします。

環境はXPSP3 の IE7 です

244:Name_Not_Found
08/10/29 23:31:17
質問させてください。
onclick関数でHTMLのリンク要素のように他サイトに飛ばすことはできますでしょうか?
できるのなら方法を教えていただけませんか?

245:Name_Not_Found
08/10/29 23:42:24
onclick="location.href='URL'"

246:244
08/10/29 23:54:24
>>245
ありがとうございます!できました。
ただ、欲を言えば新しいウィンドウで開きたいのですが、
そのような方法はありますでしょうか?

247:Name_Not_Found
08/10/30 00:16:52
小出しにすんな死ね

248:Name_Not_Found
08/10/30 00:17:20 ef+iSf+5
それはギャグなのか

249:244
08/10/30 01:30:22
みなさんごめんなさい。
onclick="window.open('URL','new');"
でうまくいきました。

>>247
試してみるまで気づかなかったもので、すみません。

>>248
ギャグではないのですが、失礼しました。

250:Name_Not_Found
08/10/30 22:37:25 Loz9bFuT
質問です。
var array = [['']];
という2次元配列の宣言の仕方をとあるサイトで見かけたのですが、
これを new Array を使用して宣言しなおすとすると、
どのような宣言の仕方になるのでしょうか?
「[['']]」の具体的な意味(内容)を知りたく思います。
よろしくご教示ください。

251:Name_Not_Found
08/10/30 23:12:06
>>250
var array = new Array();
array[0] = new Array('');

252:250
08/10/31 00:44:00
>>251
レスありがとうございます。
なるほど、array[0]に対して、「''」(中身がない)配列を加える感じっぽいですね。
勉強になりました。

253:Name_Not_Found
08/10/31 01:24:27
>>252
ナンカチガウナー。Arrayコンストラクタの引数の扱い方をシラベナー。

var array = new Array();
array[0] = new Array();
array[0][0] = '';

254:Name_Not_Found
08/10/31 01:39:43
>>253
別に間違ってない。
Array コンストラクタの引数が 1 つの場合、
それが数値の時はその長さの配列が作られるが、数値じゃない場合は最初の要素がその値になる。
結果として >250 も >251 も >253 も

var array = new Array(new Array(''));

もやってることは同じ。調べてみな。

255:Name_Not_Found
08/10/31 02:05:13
>>254
いやこの辺が違うなって言ったの

> 「''」(中身がない)配列

256:Name_Not_Found
08/10/31 07:45:44
’’ というのは空文字列の実体なので
new string() と同等の意味になるでしょ。
new string() と new Array('') が等価なのかな?

え?string()なんてない?
おじゃましました。

257:Name_Not_Found
08/10/31 08:00:13
無知もここまでくると気持ち悪いな

258:Name_Not_Found
08/10/31 08:47:36
var array = [['']];
→ var array = new Array(['']);
→ var array = new Array(new Array(''));
new Array(...)と[...]が違う結果になるのは ... の部分が
1個の整数のときだけだが、上の場合はいずれも該当しないから。
しかし個人的には [['']] の方が簡潔で見やすいと思うけどね。

259:Name_Not_Found
08/10/31 09:21:43 olHAtU/2
206,211,219,223です。

>>235
返事がおくれました。

ADODB.StreamはIE7ではだめだそうです。

やはり無理か・・・と、思った矢先、
友達に相談したら希望の光が、
時間がなくまだ試していないのですが、

読み込み元に空のdivを作り、そのinnnerHTMLに
responseTextをぶちこむ、で自分をパースする。

うまくいったら書き込みます。


260:Name_Not_Found
08/10/31 14:56:21
それでも化ける気がする
iframe.src と並んで最後の手段だね

261:Name_Not_Found
08/11/01 12:07:21
anything from here offsetLeft,offsetTop,offsetWidthそしてoffsetHeight─静的配置要素の絶対位置を確実に取得する方法について
URLリンク(hkom.blog1.fc2.com)
offsetTop/offsetLeft/offsetParentの闇 - Backstage of theater.js
URLリンク(d.hatena.ne.jp)
Positionオブジェクトの枠線幅問題対策 - Backstage of theater.js
URLリンク(d.hatena.ne.jp)

を読んでJavaScriptでの位置指定をクロスブラウザに完全に行うことが極めて困難だと知り、
ここ二年ばかりは熱心にJavaScriptにハマってましたが、ちょっと幻滅してしまいました。
ここに書かれている対策(table内の要素では位置指定を使わない、body要素でのborder, marginの計算を考慮に入れて
offsetParentsを足し込む、など)をすればうまく動くようですが、
どうも釈然としないものがあります。

・知人は位置指定にこだわるならJavaScriptでなくフラッシュを使うべきと言ってましたが、果たしてそうなんでしょうか?
そんなに位置指定の正確さってJavaScriptにおいて問題になりうるものなんでしょうか?(問題になるケースとしてどんなものがありますか?)
・例えば、矩形範囲のHTML要素を取得するのに、出来れば2px以内に誤差を抑えたいですよね。
しかし、上のリンク先を見る限りではtable要素内の要素の位置を正確に取得するのは限りなく困難です。
だから、JavaScriptで矩形範囲のHTML要素を取得しようとするのは無謀だというふうに考察したんですが、どのように思われますか?
・JavaScriptの闇というべき致命的欠点って他にありますか?

262:261
08/11/01 12:08:42
すみません、>>260の位置指定は、全部「絶対位置取得」の間違いでした。

263:Name_Not_Found
08/11/01 13:03:55
JavaScriptの問題じゃなくてブラウザの実装の問題じゃないか

264:Name_Not_Found
08/11/01 13:18:23
CSS

265:261
08/11/01 17:20:09
>>263
ブラウザの実装の問題として質問しました。深刻な問題ではないでしょうか?

266:Name_Not_Found
08/11/01 17:57:35
>>265
>>263は「JavaScript言語の実装の問題ではなく、
DOMなど(JavaScript言語仕様では規定されていない)
オブジェクトモデルの実装の問題だ」といいたかったと思うの。

で、闇だ何だと大げさに騒ぎ立ててるけど、あなたの作ってるページは
枠線の幅が2pxを越えるテーブルが大量にネストしてたりするのかな?
昔懐かしのテーブルレイアウト全開でやってるならともかく、
そうでないならたとえテーブル利用時に正しく位置取得できなくても
そこまで大きな誤差が出ることはほとんどないのでは?

267:261
08/11/01 18:24:30
>>266
DOM実装の問題だという件、理解しました。

さて、闇が何を指すかを正確に理解していただかないとコミュニケーションが成立しない(闇だ闇じゃないだの不毛な平行線上の言い合いになる)ので、
事実を確認します。

URLリンク(d.hatena.ne.jp)
によれば、テーブル内の要素のoffsetParent, offsetLeft/Topは、ブラウザによって大きく異なります。
枠線が2pxを超えるか否かといったレベルの問題ではなく、そもそも何がoffsetParentになるかというのがブラウザによって違います。
例えば、Firefoxではposition:relative;なtd要素内のposition:absolute;は
body要素がoffsetParentになるけど、IEではtd要素がoffsetParentになります。
これは場合によっては、100px以上の誤差が発生しうることを意味します。

正確な位置取得は、矩形範囲のhtml要素を取得する関数を作る際には深刻なのではないかと考えました。
これは例えば、LDRizeのような事をするために表示領域内のhtml要素を取得する
必要がある時には便利な関数と思われますが、正確に位置を取得する必要があります。


268:Name_Not_Found
08/11/01 18:38:46
>>267
ブラウザ間の実装が異なるならブラウザを判別するコードを使って実装の違いを吸収すればいいわけで
実際にそれぞれのブラウザの挙動の違いは詳しく分かっているわけだしそれを考慮したコードは書けるよね

CSSとかと違ってJavascriptはブラウザ毎に違うコードを実行するなんてことが簡単にできるからそんなに問題にはならないかと

269:261
08/11/01 18:47:15
>>268
ブラウザテストすればいいということですね。

しかし、>>267のような特例が無数にあることが問題です。
リンク先に出ているものだけで10個ありますが、この記事の筆者はこの途方もなく複雑な挙動に
「闇」を感じて以降調査を打ち止めにしたようです。
ということは、他にもたくさんある可能性があります。

それだけでなく、この記事が書かれたのが2006年なので、最新版では挙動が異なっている可能性もあります。

もし、矩形範囲のhtml要素を取得したいような場合に、自力であれこれ各ブラウザの挙動をテストして、
クロスブラウザなコードを書くのは極めて困難だと思いませんか?

270:Name_Not_Found
08/11/01 18:58:49
>>269
お前はただ同意を求めてるだけなのか?
なら、困難だと思うよ。これで満足か?

271:261
08/11/01 19:06:56
>>269
すみません。問題点を明確にするために自分の意見を述べすぎました。
そのせいで、あらぬ誤解を生んだようです。
質問は>>261にあります。これについての回答を期待しています。

272:Name_Not_Found
08/11/01 19:19:21
そもそも質問の意図がわからん
何がしたくて要素の絶対位置を取得したいのかで答えは変わってくる
用途によってはJSよりFlashを使った方が良いだろうし
全てのHTML&CSSに対して適用できるような手法が必要なのはライブラリを作って公開しようとしてる場合ぐらいではないかと

273:Name_Not_Found
08/11/01 19:22:15
位置指定というか、px 単位での調整が必要ってどんな処理だ?
JavaScript のアウトプットって DOM が中心だから、
ブラウザの画面内で位置調整を行う方法って CSS に頼るしかない。
JS 側はクラスや ID や要素を指定した DOM を弄って、予め作った CSS に適用させる感じ。
もちろん、CSS に対応しているかどうか、
CSS がどんな描画されるかなどは実装依存(てか相当バグがある)だが、それは CSS の問題。
HTML を描画できるだけじゃ嫌、ピクセル単位で画面を調整したいってのは、それこそ Flash を使えばいい。
ただし言語仕様を Adobe が握ることになるので、
VerUp の度に拡張の嵐の憂き目に遭うだろうね。

274:261
08/11/01 20:02:33
>>272
確かに漠然とした質問でした。私自身問題を正確に理解できていないのもあります。

>全てのHTML&CSSに対して適用できるような手法が必要なのはライブラリを作って公開しようとしてる場合ぐらいではないかと
Webサイトやクライアントサイドのツールを自分が作るためのライブラリを作ろうとしています。
確かに、ユースケースを限定すれば、それほど深刻な問題ではなくなるのかもしれません。

>>273
>位置指定というか、px 単位での調整が必要ってどんな処理だ?
それを経験豊富な先輩方におたずねしたかったのです。

>CSS がどんな描画されるかなどは実装依存(てか相当バグがある)だが、それは CSS の問題
いや、offsetParentやoffsetLeftが何を指すかというのは、CSSの問題ではないと思います。
例えば、offsetLeftがoffsetParentのborderの外辺までの距離を指す場合もあるし、borderの内辺までの距離を指す場合もあります。
offsetLeftは、CSSのプロパティではないので、クライアントサイドJSをどのように実装するかという問題ですよね。

>ピクセル単位で画面を調整したいってのは、それこそ Flash を使えばいい。

やはり、JSでは困難なんでしょうか?

私の理解では、矩形範囲のhtml要素を取得することはFlashに出来ないですよね。
FlashはFlashの中のモノにしかアクセス出来ないので。
これが制約にはなりますが、フルFlashのサイトにするなどして回避はできそうです。

ただ、ldrizeのようなクライアントサイドツールを作る場合には、ほとんどJSしか選択肢がないですよね。
ldrizeはコードを見ると雑な処理で妥協しているところがあって、実際、挙動がおかしいことが多々あります。
ですが、長く使っているうちに、「これが仕様なのかな」と納得してしまいました。
あまりWebで位置取得の話題が深刻なテーマとして出てこないところを見ると、皆さん妥協してらっしゃるのかなと思いました。

しかし、正確な位置取得のライブラリがあっても良さそうなものですが、見かけません。
何がご存じのものがあれば教えて下さい。>all


275:Name_Not_Found
08/11/01 20:45:56
オレの自前ライブラリの GetAbsPosSeikaku() が火を噴く時が来たようだ。

276:Name_Not_Found
08/11/01 21:17:22
位置指定にこだわってるのは >261 なのに実例を出せと言ったら「こっちが訊いている」ってアホかよ

277:Name_Not_Found
08/11/01 22:27:42
リンクにカーソルを載せたときにリンクと被らないようdivをポップアップウインドウ風に表示する、なんて場合に問題になるかもしれない

278:261
08/11/02 00:33:07
>>276
すみません、私が想定している実例を出せという意味でしたか。
であれば、矩形範囲のhtml要素の取得が実例です。
これが本当に実例になっているかは実体験が無いので分かりません。
なので、JavaScriptでpx単位の正確さを要求されるような例ってどんなのがありますかと>>261の最初の質問で聞きました。
てっきり、>>273は本当に実例になっているものを出せという質問かと思ってしまいました。

私はかねてから矩形範囲のhtml要素取得などのために、位置を扱うライブラリ作成を予定していました。
だから、位置取得にこだわっていますが、>>261のリンク先を読んで絶望してしまいました。
当初の予定では、まず位置を扱うライブラリを作成してから、さまざまな実例を試して、
矩形範囲のhtml要素取得もpx単位の厳密さを要するものなのかも実体験として把握するつもりでした。
しかし、ライブラリ作成の意欲を無くしてしまったので、まだpx単位の厳密さを要する実例を
実体験として検証出来ないでいる段階です。
そこで、>>261では、私のイメージ上では矩形範囲のhtml要素取得がpx単位の厳密さを要する実例になっている
と思うのですが、実体験としてそうした厳密さを要する実例を先輩方にお尋ねしました。


>>277
ありがとうございます。確かに問題になりそうです。
それ以外に、重なり合わないようにD&D可能なボックスを配置する際にも問題になるのではと考えました。
ドロップ時に衝突判定を行い、重なるようであれば重ならないような位置にズラしてドロップする方法をいくつか試行し、
どうしても重なるようであればD&Dを取り消し元の場所にボックスをドロップする、という処理を考えます。
これは矩形範囲のhtml要素の取得より有用かもしれません。
こういったことをやろうとされた方ややっているコードをご存じな方はいますか?
px単位での位置取得の正確さが要求されるような例ではないでしょうか?

279:Name_Not_Found
08/11/02 08:21:41
グダグダ言ってないで適当なブラウザ上で「矩形範囲のhtml要素取得」とやらを実装してみろ。
elementFromPoint()もgetBoundingClientRect()も使わず、実用的な速度で動作し、
かつボックスの重なりも処理できるなら、それだけで画期的だ。
値がズレてるならズレたまま扱えば正しく要素を取れるんじゃねーの。

>>267で何やら言ってるが、getComputedStyle()やbox-sizingも試してみたのか。
CSSOM-ViewのWDは目を通したのか。

むしろ>>267なんかより厄介な問題が出てくると思うが、それは遭遇してから言ってこい。

280:261
08/11/02 08:55:45
>>279
これまでで一番有益なアドバイスでした。ありがとうございます。
CSSOM-Viewは初めて知りました。
さて、
URLリンク(hkom.blog1.fc2.com)
の位置取得方法はお試しになりましたか?
これが私の知りうる限り一番正確に位置取得できる方法なんです。
実は>>267の問題もとりあえずはこれで解決できますが、ただ限られたケースしか使えないという欠点はあります。
ちなみに、やってみれば分かることですが、getComputedStyle()やbox-sizingは使い物になりません。
その理由はスペースの都合で割愛します。
要するに、知りうる限り、完全に正確に位置取得をする方法がないので、皆さんにおたずねしたいのです。

281:Name_Not_Found
08/11/02 09:25:02
だからな、あんたは「正確、正確」と言うが、
どのブラウザも各ブラウザ基準で「正確に」値を出してるだろうが。
あんたが言う「正確」とは何基準だ?脳内か?何に統一したいんだ?

> getComputedStyle()やbox-sizingは使い物になりません

理由を書かねば話になんねーだろ。三行で書け。
古いMozillaでoffsetLeftがleftの計算値に一致しない現象を知ってる奴なら今でもgetComputedStyle()でやる。
つーか最初に一回だけ計ってその後の処理はstyle.leftで統一する。

282:234
08/11/02 09:46:12 56s2bwm5
>>234の件引き続き探してます
Mozillaの独自CSSなどで要素のbackgroundの透過設定が出来れば良いと思うんですが

283:261
08/11/02 09:46:57
>>281
>あんたが言う「正確」とは何基準だ?脳内か?何に統一したいんだ?
>>183の(3)です。

>理由を書かねば話になんねーだろ。三行で書け。
offsetLeft/Topの総和が座標値の概算値になります。
しかし、>>261のリンク先にあるようにoffsetLeft/Topの定義はブラウザ依存です。
だから、getComputedStyleを使っても問題の先送りになるだけです。

284:Name_Not_Found
08/11/02 10:02:08
どうしたアホ外人、出番だぞ

285:Name_Not_Found
08/11/02 10:15:12
>>283
>>183の(3)はoffset(Left|Top)の算出と何も関係ねーはずだが。

> offsetLeft/Topの総和が座標値の概算値になります
> getComputedStyleを使っても問題の先送りになるだけ

あんたがやりたいのは「正確な位置算出」であって「正確なoffset(Left|Top)算出」じゃないと思ったんだが、
違うのか。

286:261
08/11/02 10:34:14
> >>183の(3)はoffset(Left|Top)の算出と何も関係ねーはずだが。
>>183の(3)による座標値と一致している事が私の正確の定義です。

> あんたがやりたいのは「正確な位置算出」であって「正確なoffset(Left|Top)算出」じゃないと思ったんだが、
違うのか。

offsetLeft/Topの正確さは私は定義してないです。

どうも不毛な流れになってきたので、これで終わりにします。
有益なアドバイスありがとうございました。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch