+ JavaScript の質問用スレッド vol.54 +
【質問を書く上で】 1)ユーザ(閲覧者)に迷惑がかかる性悪スクリプトは回答されない。 例: 別窓開きまくり、閉じる/戻るのを妨害、全画面占有、etcは最悪。 答えさせようと「分からねえんだろ」と煽っても無駄(過去スレが証明)。 2)言葉でぐだぐだ書かずにソースを貼る、ただし要点を整理して。 そのまま貼って動かせると試してもらいやすい(ただし回答者に連結さすな!) 長い(1レスに入らない)場合はアップロードしてURIを貼る。 3)初心者という言葉は危険なので使わない方がよい。 初心者を言い訳に自力で調べない/考えない奴が最悪に嫌われる。 4)自分で調べたこと/試したこときちんと書く(調べもしない奴は最低)。 ただ「動きません」「エラーです」は何も情報がないため嫌われる。 エラーは「どの行で何のエラー」を書く(ブラウザをそのように設定すれ)。 ブラウザの設定すらできんヤシはFFxのJavaScriptコンソールを使え!!! OS、ブラウザ、バージョン、うまく行かない条件を明記しエラー再現可能に。 5)特に古いバージョン限定の時は必ず明記! 回答もチグハグになり回答者に2度 手間を食わせる可能性大(現行Ver.:IE5.5-6、N6-7、Opera7-8) 6)どういう時にどういう動作をさせたいのかを脳内にとどめずきちんと書く。 例:「自動ポップアップしたい」←どういう場合(マウスオーバー、クリック、 ボタン押し、select選択)に何(別窓、レイヤー、その他)が出るのか書け! 7)質問はまっとうな(他人に理解できる)日本語で。 前項の例に限らず、他人に理解できない質問文は煽られるだけで時間の無駄
【FAQその1】 Q1. 開いた別窓/フレームの内容にアクセスできないのですが… A1. ページ内容が別サーバの場合セキュリティ制約により絶対無理です。 Q2. JavaScriptでローカルファイルを読み/書きたいのですが… A2. Webではセキュリティ制約により絶対無理です。できたら恐ろしいことに… A3. 同じタグの中でonclick="foo()"とonclick="bar()"を同時に使いたいのですが… A3. セミコロンで複数の文を区切られます。onclick="foo();bar();"としましょう。 Q4. document.write(...)でページ内容を追加したいのですが… A4. 一度ページ表示完了後にwrite()すると内容はクリアされちゃいます。 部分的に内容変更するには(1)他フレーム/iframe/別窓への表示、 (2)textarea等への表示、(3)DOMでノード挿入、(4)innerHTMLのどれかで。 innerHTMLは非標準ですがIE、Opera、Gecko(N6/N7/Firefox等)で対応済。 Q5. table/tbody/tr要素のinnerHTMLを書き換えるのがうまく行かないのですが… A5. IEはそれらの要素のinnerHTMLは変更不能。DOMを使って書き換えるか <div><table>...</table></div>とでもしてdivのinnerHTMLを書き換えましょう。 Q6. DOMでtable要素にtr要素を追加しても表示されないのですが… A6. IEではtbody要素にtr要素を追加する必要があります。 tbody要素はtbodyタグを書いていなくても自動的に作成されます。 またはtable.insertRow()/tbody.insertRow()を使いましょう。 Q7. Aタグのonclickで動作指定してるのですが時々動きません… A7. 「onclick="...;return false"」としないとページ移動しちゃうから。 Q8. 変数w1、w2…を順にループで(番号をiに入れて)設定/参照したいのですが… A8. グローバル変数はwindowのプロパティだからwindow['w'+i]を読み書きすれ。
【FAQその2】 Q9. フォーム部品名を変数にした「...myform.変数名.value」が動きません… A9. 「document.forms.myform.elements[変数名].value」でどぞ。 JavaScriptでは一般に「obj.x」と「obj['x']」は同じ意味です。 例:「obj.p0=obj.p1=...=obj.p8=0;」⇔「for(i=0;i<9;i++) obj['p'+i]=0;」。 Q10. CSSで設定した背景色がe.style.backgroundColorで取得できないのですが… A10. IEではe.currentStyle、Geckoではwindow.getComputedStyle()を使います。 Q11. 100*1.15の結果が114.999…998となってしまうのですが… A11. コンピュータの実数計算は全て近似値だと思え。誤差が嫌なら整数で計算。 Q12. 任意のデータをサーバ(別鯖ではない)から取り寄せたいのですが… A12. Geckoのnew XMLHttpRequest()、IEのnew ActiveXObject("Microsoft.XMLHTTP") を使えばできる。古いブラウザだと隠しフレームに読むなどのワザが必要。 Q13. setAttribute("class","foo")、setAttribute("onclick","bar()")が動きません… A13. IEではそれは不可。「obj.className="foo"」「obj.onclick=bar」でどうぞ。 複数の関数を呼びたいときは obj.onclick=function(){foo();bar();}; という風に無名関数を作りましょう。中に書かれたコードが実行されます。 Q14. 文字列の置き換えをするときにコードを使いたい(Perlのs///e)のですが… A14. string.replace(/.../,function(str,p1,p2,...,offset,s){...})としましょう。 正規表現にマッチした文字列がreturnで返された文字列に置き換えられます。 各引数はstrがマッチした部分文字列、p1,p2,...が1番目、2番目、…の()の中身、 offsetがマッチした位置、sが置き換え前の文字列全体になります。
【主張の対立:他人の嗜好は尊重。損得の議論は歓迎】 ・仕様を読む:回答者なら仕様の該当部分は読んでいるべき。質問者でも 仕様を読まずうだうだ書く奴は注意されて当然。読み間違いは生温く指摘。 ・英文文書:翻訳の努力を惜しむべからず。 読めないなら和訳を探し、 なければあきらめよう。翻訳サイトを知っている人はうまく誘導してあげて。 ・IE専用/アンチIE/クロスブラウザ:「○○は不要」「○○だけであと は無視」は不毛。質問者が分かって選択していれば尊重する。無知か らIE専なのは指摘してあげると親切。 ・標準準拠 vs 使えればよい:標準はブラウザが変わっても維持される 可能性大。非標準機能も損得を分かった上で使うならよい。 ・MS vs アンチMS:MS固有の情報はMSのサイトで見ないと分からないが、 そこだけ見ているとIE専になる。あとは上2件と同様。 ・別窓、イベント抑止など:一般には迷惑スクリプトだが質問者に正当 な理由があることも。尋ねて分かってないようなら煽っても可(w ・innerHTML vs DOM:それぞれに長所/弱点があるので理解した上で選 択するべき。一概にどちらは駄目、とは言えない。 ・on属性 vs addXXX():ハンドラが1つだけと分かっていればon属性 で簡単にハンドラを設定もあり。上書きが心配ならaddXXX()。
>>2 のテンプレはいらないと思うスレが荒れる理由を住人自らが作るようなもの。
>>5 も半分くらいいらない
テンプレ論議したければスレの終わり付近(800超えあたり) で出してね。
参考サイト、サンプルサイトの見直しと新規おすすめの収集したいね。
14 :
質問です :2007/01/19(金) 16:55:48 ID:1sA/h28b
ie6.0やff2でブラウザは確認してます <script language="JavaScript"> <!-- document.write(document.lastModified); // --> </script> このタグを記入すると、最終更新日が取得されますが なぜかf5や更新を押すたびに更新時間が更新されます。 FTPなどでファイルUPした時などファイルを最終更新日が表示されると思うのですが。。。 どこか間違ってるのでしょうか? もし違うスクリプトでファイル最終更新日が表示されるのがあれば教えてください
広告が付加されちまうレンタルページサービスとか使ってたりしないかい
16 :
Name_Not_Found :2007/01/19(金) 17:34:47 ID:9l1/EnVu
htmlでjsの外部リンクを作りたいのですがオブジェクト指定をしてくださいとエラーが出てしまいます。 htmlで使っていた<!-- -->や<script></script>どこかで使わないでくださいと書いてたのでは削除してjsファイルに保存してあります。 htmlでは問題なく動作するのですが外部リンクにしようとするとエラーが出てしまいます。 もしくは外部ファイルにするときのルールみたいなものが乗っているサイトを教えてもらえませんか。
>>16 一般論としては
<scirpt>...</script>の「内側にあるものからHTMLコメントを除いた」
ものすべてをx.jsに入れてscript要素の方を
<script src="x.js"></script>
に書き換える。なぜエラーが出るか質問したいのならエラーが出る
「最小限のサンプル」を作って貼れば見てみてもいいよ。
18 :
Name_Not_Found :2007/01/19(金) 18:49:19 ID:HWnqHLR5
質問です。(動作確認環境 Win98+IE6.0) <div style="background:url(1.gif);"> <img src="2.gif"> </div> マウスオーバーでDIV内の背景画像を1.gifから2.gif変えるにはどうしたらいいのでしょうか? ページ全体の背景を変える↓のと同じ要領でできないかと頑張ってみたのですが力及びませんでした。 <img src="2.gif" onmouseover="document.body.background='2.gif';" onmouseout="document.body.background='1.gif';"> よろしくお願いします。
document.body → (function (img) {var div = img.parentNode;while (! /*@cc_on @if (1) div.currentStyle.backgroundImage @else@*/ getComputedStyle(div, null).getPropertyValue('background-image') /*@end@*/) div = div.parentNode;return div.style;})(this) ='1.gif', ='2.gif' → ='url(1.gif)', 'url(2.gif)'
>>18 一番簡単なのはdivでもなんでもidを振って
onmouseover="document.getElementById('ID名').style.background='url(1.gif)'"
などとすることだな。
21 :
18 :2007/01/19(金) 21:50:17 ID:???
>>19 >>20 両方試したところどちらもきちんと表示されました。スゴイ!
本当にありがとうございました。勉強にもなりました。
一つのjsファイルの中に複数のプログラムを保存しても問題ありませんか?
23 :
Name_Not_Found :2007/01/20(土) 00:09:41 ID:Z0NIKYKH
>>17 <html><head>
<meta http-equiv="content-type" content="text/html; charset=EUC-JP">
<title>@</title>
<script type="text/javascript" src="jsfile005.js"></script>
<body>
〜〜〜〜省略〜〜〜〜
<input onclick="111(document.getElementById('Table1')〜〜〜
111はjs内function 111()
エラーコードは<input以降を指してました。
onclickとondblclickで別の動作を呼び出す時に ダブルクリック側を実行させようとするとクリック側も起動してしまいます これをダブルクリックだけ呼び出すようにはできますか?
>>24 dblclickを使わない。clickだけで時間を計って分岐する。
>>25 1秒以内にもう一度クリックしたらダブルクリックだとして
クリックされたらファンクション起動
起動直後にタイマー作動
再びクリックされたらタイマーをチェック
1秒でifで処理分岐
細かく書くとこんな感じ?
どこか忘れたけど、 JavaScriptで作ったWebToolで、 4回クリック(なんていうの?クアッドクリック?)使ってるところあった。 どう考えても使いにくかったが。 ところでondbclick発生するときのクリックの間隔って OSの設定に依存するもの? ブラウザによっても違うと思うが。
XとかWindowsとかからのダブルクリックイベント(シグナル?メッセージ?)をブラウザが受け取って、スクリプトエンジンに通知してるだけでしょ。
29 :
Name_Not_Found :2007/01/20(土) 01:56:10 ID:ChHlNKf7
javascript応用できる人が羨ましい いろんなサイトでサンプル配布してるけど普通のしかない。
>>28 そっか。
onclickだけでダブルクリック再現すると、
待ち時間どれくらいにするべきか難しいよね。
>>23 その「111」て数字の1が3つだよね。そんなの構文エラーだが。
関数名は英字で始まらないと。
げげ、スレ立ての痕跡が… 構文エラーではなく関数として 指定したものが関数オブジェクトじゃないというエラーだね。すまん。
>>30 そんなもの500ミリ秒以下にしておけば良いだろう。
//FireBugで試行して適当なミリ秒を見つけるだけのスクリプト。
var timeStamps = [];
var diffs = [];
document.addEventListener('click', function (e) {
timeStamps[timeStamps.length] = e.timeStamp;
}, false);
document.addEventListener('dblclick', function () {
console.log((diffs[diffs.length] = timeStamps.pop() - timeStamps.pop()),
Math.max.apply(null, diffs));
}, false);
34 :
23 :2007/01/20(土) 17:38:58 ID:Z0NIKYKH
31-32
返答頂きありがとうございます。
たしかに111は仮に記入したもので
何度か試した中では
>>31 の条件に当てはまるものを入力してあるのでこの部分は大丈夫だと思います。
ちなみに試した中ではsrc="jsfile005.jsと同じ名前にしたりもしましたがだめでした。
>>34 アホか。エラーが出る最小限のソース作って貼れってるじゃん。
その同じエラーが出るものでなければ診断などできない。もう帰れ。
36 :
Name_Not_Found :2007/01/20(土) 19:09:16 ID:gFooeIhD
クラスを宣言し 同じクラスのインスタンスを2つnewするのですが プロパティがstatic変数のように異なるインスタンスで共有されてしまいます。 そういうものなのでしょうか?それともクラスの作り方が間違ってるんでしょうか ↓のような例だと、alertには10 , 100 , 100と表示されてしまいます。 3回目のalertが10と表示したいのです。。 function Hoge(value) { _value = value; } Hoge.prototype = { setter: function(value){ _value = value; }, getter: function(){ return _value; } } var x = new Hoge(10); var y = new Hoge(100); alert(x.getter()); alert(y.getter()); alert(x.getter());
37 :
Name_Not_Found :2007/01/20(土) 19:12:54 ID:gFooeIhD
訂正です。↑の例だと100,100,100って並びますね。。 正しくは↓のようにすると10,100,100ってなってしまうということです。 var x = new Hoge(10); alert(x.getter()); var y = new Hoge(100); alert(y.getter()); alert(x.getter());
この場合thisを書けばいいんでないの。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html><head><title>???</title> </head><body> <pre><script type="text/javascript"> function Hoge(value) { this.value = value; } Hoge.prototype = { setter: function(value){ this.value = value; }, getter: function(){ return this.value; } } var x = new Hoge(10); var y = new Hoge(100); alert(x.getter()); alert(y.getter()); alert(x.getter()); </script></pre> </body></html>
>>38 で、できました。。ありがとうございます。
thisですか。めちゃ悩んでたのが馬鹿みたいです(泣)
フォームのsubmitボタンをテキストにすることは出来ませんか? もしくはbdlclickのアクション時にsubmitすることは出来ませんか?
クロージャに関してなのですが、質問させてください。
こちらのページの例となります。
ttp://0xcc.net/blog/archives/000040.html 下のコード抜粋にて、
td.onmouseover = makeHandler(td);
というイベントが何度も呼ばれるのですが、
var depth = 2という初期化はなぜ、初めの一回しか通らないのでしょうか。
| function makeHandler(element) {
| var depth = 2; // ここの初期化
| var closure = function() {
| ...
| }
| }
| return closure;
| }
|
| function makeTile(size) {
| ...
| td.onmouseover = makeHandler(td);
| ...
| }
>>41 なぜというより、そういうものだろう。
2005年7月という微妙に古い記事だな。
引数のelementとローカル関数closureが、かんぜんに、メモリーリークサンプルになってる。
43 :
Name_Not_Found :2007/01/21(日) 04:42:46 ID:xkjTPUcX
検索で見つからなかったので、質問させて頂きます。 セル内の背景画像をリロードの度にランダムに表示させることは可能でしょうか? もしどこかにありましたら、教えて頂けると幸いです。 よろしくお願いします。
>>43 このスレだけでも似たような処理はあるだろう。
>>44 あれが似てると言うのか、とりあえず君は日本語の勉強から始めてください。
下のようなコードでXMLにXSLを適用した結果を保存しようとしています。 var xdoc = new ActiveXObject("MSXML2.DOMDocument"); xdoc.async = false; xdoc.load(SRC_FILE); var xsldoc = new ActiveXObject("MSXML2.DOMDocument"); xsldoc.async = false; xsldoc.load(XSL_FILE); var xdoc2 = new ActiveXObject("MSXML2.DOMDocument"); xdoc2.async = false; xdoc.transformNodeToObject(xsldoc, xdoc2); xdoc2.save(OUTPUT_FILE); しかし、保存した結果のファイルはカラで中身が入っていませんでした。 alert(xdoc.transformNode(xsldoc)); のようにすると正常に変換結果が表示されたので、変換処理自体は問題なく行われていると思うのですが 他にどういった原因が考えられるでしょうか?
>>47 保存された。
//関係ない余談だが、MSは 3.0 または 6.0 を明示するよう薦めているね。
>>48 すいません、どこに保存されたのでしょう
簡単な考え違いをしているのかもしれませんが、どうか指摘していただけませんか
>>49 どこってw
OUTPUT_FILE = "path\\to\\output-file.xml" に保存されたよ。
transformNode() の結果と同じものが。
ああ、わざわざ実行してくださったんですね。ありがとうございました! しかしやはり私のほうでは上手くいっていません XHTMLに変換しているのですが、それが問題なのでしょうか… それとも環境の違いかな?IE6でテストしているのですが
>>43 リロード時の処理: bodyのonload属性中に書く。
要素を指定: IDを振って document.getElementById('ID名')
任意要素の背景画像設定: 要素.style.backgroundImage = 'url(ファイル名)'
配列aからランダム選択: a[Math.floor(a.length*Math.random())]
これらを組み合わせるだけ。たったこれだけでも組み合わせ
られないならこのスレの質問以前の水準だから勉強して出直せ。
>>51 MAS JScript と、ふつうの cmd.exe で、上手く行っていたんだが、
ブラウザ使ってみたら、確かに、空のファイルになるな。
ブラウザ上からファイル保存が制限されているというオチみたいだね。
ちなみに、HTAにしてやったら、きちんと内容のあるファイル保存された。
>>52 ID振るなら、CSSセレクタで特定できる。
onload ではなく、document.write('<style ...'); する方がベターだろう。
>>41 td.onmouseover = makeHandler(td);
を
var closure = makeHandler(td);
td.mouseover = closure;
と考えればわかりやすいのでは?
それと、多分君は
td.onmouseover = makeHandler;
だとかん違いしてるのでは?
それで、このサンプルでメモリーリークしないためにはどうすればいいの?
>>54 ああ、td要素全部の背景を一括してということね。
特定の1個かと思ったので。
>>55 前スレに熱い煽りあいとその末の素晴らしい議論があったのでそれを参照されたし
>>55 try {
return closure;
} catch (ex) {// JScript は catch を略せない。
} finally {
closure = null;
}
しかし、根本的には、要素オブジェクトを参照する変数・引数が存在する関数内で関数を定義しない。
今時、JSがターゲットにするブラウザは、そこそこ高性能のマシンに載っている。
だから、IDなどの値で渡して、クロージャ内で要素オブジェクトを一々参照しても、十分過ぎるほど速い。
>>56 特定の1個とか一括とか関係なく、再描画を避けた方がベターだろう。
まあ、質問者が屑なので、どうでもいいが。
>>51 とりあえず、HTML の場合、ファイル保存は、#default#userData としてなら出来た。
この場合、%USERPROFILE%\UserData 内のどこかに、
save() の引数として指定した名前でUTF16LEのXMLファイルとして保存される。
var d = new ActiveXObject('Msxml2.DOMDocument.3.0');
var s = new ActiveXObject('Msxml2.DOMDocument.3.0');
d.async = false;
s.async = false;
d.load('test.xml');
s.load('test.xsl');
document.documentElement.addBehavior('#default#userData');
document.documentElement.load('foo');
alert(document.documentElement.XMLDocument.xml);
d.transformNodeToObject(s, document.documentElement.XMLDocument);
document.documentElement.save('foo');
>>51 >>59 への追記だけど、userDataには、ページ当たり64KBの制限があるから、
XHTMLファイル内容保存には向いているとは言えない。
>>58 その「catchを略せない」って言うのはどういう意味だ?
とりあえず試した限りではIE 5.01(JScript 5.1)でも
try {} finally { alert('Hello world'); }
でアラートが表示されるんだが。
62 :
Name_Not_Found :2007/01/21(日) 13:50:42 ID:CrKEfDYl
document.defaultViewっていつのまにwindowになったんですか?>Firefox というか仕様的に正しいの?
windowオブジェクトがAbstractViewインターフェースを 実装しているのならばDOM 2 Views仕様的に正しいし、 Window Object 1.0仕様(まだWDだが)では WindowインターフェースはAbstractView インターフェースを継承している。
自動でページ移動をすることは出来たのですが 移動するときにtarget='_parent'を同時に行うにはどうすればよいでしょうか?
>>64 paernt.location.href = '行き先'
window.open("行き先", "_parent", "")
<script src="test.js?q=foo"></script> ↑ test.js内でこのqの値(foo)が取れる方法をご存知ではないでしょうか?
DOMでやれ
CGIでtext/javascript吐くなら取れる
72 :
41 :2007/01/21(日) 23:46:18 ID:???
ありがとうございます。
>>42 そういうものですか。
>>55 そこでもないのです。
C++とは違うという認識で勉強してみます。
>>58 リソースを有効に使うソースを示してください。
あと再描画をすることが目的なのですが。
>>72 >>58 をよく読むこと
要はクロージャ内に要素の参照を保持しなければいい
例えばidだけあれば参照は出来るでしょうに、どうして参照を持つ必要がある?
もうひとつ、ソースを要求する前に自分で書いたものを提示すべし
別にこちらはソースを示さなくても回答になりうるのだから教えて君はよくない
話は自分で出来るところまでやってからだ
>>72 >再描画をすることが目的
違うだろ。
いったん描画されたのに、わざわざロード直後に再描画したいのか?w
>>72 >リソースを有効に使うソースを示してください。
示してるだろ。隔離スレ行けよ屑が。
76 :
41 :2007/01/22(月) 01:57:24 ID:???
屑だからそれじゃわかんないんですけど。
>>77 だから
>>17 を読んで何が分からないか言ってみ。
全部書けというのなら断る。
>>76 結局何が質問したいわけ。元の質問がまだ分からないのだったら、
td.onmouseover = makehandler(xxx);
では「makehandlerという関数を読んで、そこから返された関数
オブジェクトをonmouseoverに設定する」わけだから、makehandler
という関数は1回だけ呼ばれる、返された関数(イベントハンドラ
はイベントが起きるたびに何回も呼ばれる、という回答になるが。
あふぉにかまうなよww
>>81 ではもうこのスレでアンタに回答することはないね。
自分で勉強するか親切に教えてくれるところへ逝けば。さいなら。
IEのDOM操作が微妙に重い気がする。 createElementが重いのはわかってるからcloneNode使ってるんだけど… どうももっさりする
>>83 複雑な構造なら、もしかするとinnerHTMLで要素を作った方が早かったりする
>>82 みたいなレスがつくと他に解答者いたとしてもつきづらくなるので
やめていただきたい。スレ代表者ですか?
以前から思ってたのだけど初心者に答える気がないのなら上級者用のjsスレを作ったらいかがでしょう?
>>86 このスレは上級者用じゃないが「自分で勉強する気がある人」
向けのスレだ。それで54スレずっとやってるので変える気はない。
>>88 読むどころか返答もしてますよ
>>89 どのラインを勉強してないといえるのかわかりませんがそれなりにやってますよ
ラインが厳しければ誰も書き込みできませんね
>>87 あそこではこちらのスレに誘導されるはずでしょう
>>90 > ラインが厳しければ誰も書き込みできませんね
それでいいって
> あそこではこちらのスレに誘導されるはずでしょう
凄まじい思い込みw
>>91 なんのためにこのスレがあるんですか?そもそもあなたが管理するわけでもないでしょう?
あなた自身の知識欲を満たすためにスレを利用するようにルールを決めるのなら上級スレを作るべきだと思いますよ
>>92 エラーコードが指し示す部分は出してあります。
最小限のサンプルを作ること自体に意味があるんだよ
>>90 理系の論文と同じさ、要は再現性のないものは「YOUの環境が悪いんだろう」としかいえない
回答側にどこに問題があるのか探すための情報を与えなければならない
それが出来ないなら、こちらも回答出来ないのは当たり前
で、上記の内容が、あなたにはレベルが高すぎるだろうから、簡単な例に直すと、
別にこのスレの求めてるレベルが高いというか、教師に「どこが分からないのか分からない」と聞いているようなものだ
つまり、分からなければ「分からない問題を解いてみた過程の書いてあるノート」を教師に見せなければならない
ということ
あなたのいってるエラーコードだけど、かなり多くの場合に出るエラーだから、何の参考にもならない
先の例だと、いきなり「問2がわからない」と教師に言っているようなもの
だから、「どの教科書」(=どのソース)についていっているのか伝える必要があるわけ
>>95 回答者と質問者この場合は立場が逆ですね
最小限といわれても思う最小限を出してるのにも関わらず
同じ言葉の繰り返しで最小限を出せといわれても指し示されていないのでこちらも返答しようがありません
>>96 よく分からないんだが動いてエラーの出るソースってどっかにあった?
動かない断片だと動かして見られないから原因究明もできないわけで。
//POST送信 function do(){ document.fForm.param.value= tsetdata; document.fForm.submit(); } 上記のようにPOST送信してから、自画面にパラメータを 渡そうと考えています。 POST送信して、パラメータを受け取るとき、 どのようなメソッドでパラメータを取得できるのでしょうか? GET送信のときは、次のように、location.searchを使って 取得していたのですが、POST送信では取得できないようです。。 var parmdata = location.search;
>>98 formのtargetに渡すデータを自分でつけ加えるとかクッキーで渡すとか。
クッキーの利用は、考えたことありませんでした。 もしだめだったら、利用させていただきます!! そもそも、POST送信でパラメータを受け取ることはできないのですかね?
>>100 サーバ側で何らかのアクションをするようにしないと無理
>>96 質問が高度過ぎて誰もわからないんだよ。
なんとか言いくるめようとしてるのにそろそろ気がつけ。
上級スレに行くべきなのはお前なんだ。
>>96 だから、ソースもないのにそんなありふれたエラーじゃ、原因を特定できないから、
あなたの提示した情報は最小限のソースとして不十分なの
おわかり?
サンプルってのがサンプルソースコードだってわからなかったに一票www
ああ、それでエラーの出てる「箇所」だけ貼ってるのか。アホや。
ドメインまたいでるとかいうオチなんでしょ。
きっとbodyの最後の方にscriptを置いていて、それをheadでロードするようにしたから、オブジェクトがないと言われたんだろ もともとのscript要素のあった位置で外部ファイルを読み込んでみれ
だからさー、そうやって予想しちゃうとつまらないじゃん。 テッテして「最小限のソースを作って貼れ」にした方が(ry
いやいや 上級スレに移住してもらった方が(ry
>>109 でもエラーになる場合があるから、ソースないとダメなんだよね
ケアレスミスとか本当にやめてほしい・・・
>>112 「もともとのscript要素のあった位置で外部ファイルを読み込んで」
もエラーになる場合のか?w
114 :
Name_Not_Found :2007/01/23(火) 02:38:43 ID:H7WMvxy8
質問です。 初歩的な質問で申し訳ないのですが、手持ちの参考資料に何故か無かったので、ここで質問させてください。 <div id="hoge">aaaaaaa</div> このようにHTMLが書かれていたとして、 これをJavaScriptでaaaaaaaの文字の部分を変更したいのですが、その場合どのようにすればいいのでしょうか? getElementById("hoge").〜で参照しても、それっぽいプロパティーは無かったのですが…。 色を変えたりはあるんですけどね。。。
>>114 var hoge = document.getElementById("hoge");
for(var prop in hoge){
alert("hoge." + prop + " = " + hoge[prop]);
};
>>101 >サーバ側で何らかのアクションをするようにしないと無理
POST送信のパラメータはJavascriptでは受け取ることができないんですか。
クッキーかGETで対処することにします。ありがとうございます。
>>117 レスポンスのURIのクエリを読むことを、「受け取れる」
と見なすならば、GETとPOSTに違いはないだろ。
リクエストしてレスポンスを受け取らなくても、
フォームとフォームコントロールを走査すれば取得できるわけだから。
あぁ、スレ伸びてると思ったらやっぱり
>>16 が叩かれてたのか
いつも質問する側だけど、
>>16 みたいなのがあるとスレの雰囲気悪くなって
こっちまで聞けなくなるから困る
>>23 書いて
>>35 を言われてるのに何でもう一回コード貼らないのか理解できない
貼れば教えてくれるって人ばかりなのに
IEのしつもんです。 history.back() のボタンを作って、 実際に戻れない場合はボタンを無効にしたいのですが 実行する前に確認することはできませんか? (history.length == 0 の場合は除きます)
IEのbehaviorでsavesnapshot、saveHistoryを同時に指定することはできないのですか? ↓では、snapshotは効くようになり、savehistoryが効かなくなります。 <META NAME="save" CONTENT="history"> <META NAME="save" CONTENT="snapshot"> <STYLE> .SSSSSSS { behavior:url(#default#savesnapshot) url(#default#saveHistory); } </STYLE> </HEAD>
>>119 あんなこと言うような奴にわかっていたとしても教えられると思ってないので。
以前のこといちいち穿ってレスつけてるあなたもスレ荒廃の原因ですね
124 :
Name_Not_Found :2007/01/23(火) 22:42:50 ID:/N22kwec
クッキーについて質問です。 入力した文字列の履歴をリストボックスのように 保持するするにはどうしたらいいでしょうか? かなりググリましたが、サンプルコードがありませんでした。 また、半角スペース入力にも対応したいと考えます。
まあ、やりたい事がそのまま載ってる事は限られる。 ↓エスパーよろ
スクロールに追従するインターフェースを作ろうとして、ちょっと躓いてるので質問させて下さい。 現在XHTMLで記述しているページで、一定のスクロール量に達したら、スクロールに合わせて追従し、 かつセンター寄せしたページの左側に沿うようにJavaScriptで制御しようと、以下のように外部jsに 記述した所、InternetExplorer(6/7)以外ではどうも上手く動作しません。色々試しては居るのですが どうも糸口が見えて来ないので、どなたかこの辺の解決法をご存知の方ご享受お願いします。 window.onscroll = Menu; window.onresize = Menu; window.onload = Menu; function Menu(){ if(document.documentElement.scrollTop < 220){ document.getElementById("menu_a").style.top = 220; }else if(document.documentElement.scrollTop > 220){ document.getElementById("menu_a").style.top = document.documentElement.scrollTop; } if(document.body.clientWidth < 840){ document.all("menu_a").style.left = -5; }else if(document.body.clientWidth > 840){ document.all("menu_a").style.left = document.body.clientWidth / 2 - 420; } } ※以下にレイヤー"menu_a"をdocument.writeで吐き出すコードが続きます。
>>124 主要なブラウザは既に似たような機能を実装してるので
どれほど有用な物になるか疑問なんだが。
クッキーについては document.cookie で
半角スペースについては encodeURIComponent() で検索すれば
情報は得られるかと。
form のテキスト欄で onkeyup あたりで入力を監視すればいい。
スクリプト自体よりも候補のリストを表示させる方がめんどくさそうだ。
ご享受は頂けない
>>127 0以外の数値には単位が必要。
あと、document.all は Opera や Fx でも一応使えるが、
例えば、innerHTML ほどには一般化していない。
だから、書き直した方が良いだろう。
operaはともかく、firefoxってdocument.all使えたっけ?
132 :
Name_Not_Found :2007/01/24(水) 03:46:53 ID:WdvCgY7D
世界の時計の現在の時刻の比較の、JAVAスクリプトはたくさん見つかりますが、 2日後の時刻の9時など、日時をフォームに入力してプッシュすると、そのときの世界時計の比較が出るものってありますか? これはJAVAスクリプトのソースをください。
>>131 使える。
しかしdocument.allはnameとかも拾う糞仕様なので使う意味がわからない。
window.onloadで、特定のタグにonclickを付加すると言う関数を呼び出すようにしています。 最初にページが読み込まれたときは当然上手く付加されているのですが、 その状態でajax処理で移動したページには出来ないです。 どういうイベントハンドラを使えばいいのでしょうか?
>>135 意味わかんね。ページ移動したら、また設定しなきゃ無理だろ。
普通に考えて
ajax処理で獲得した優勝賞金使え
>>136 ajaxではなくて普通のリンクの場合は、クリックした時に画面が切り替わってwindow.onloadで
設定した関数が実行されますよね。
そうではなくてページの一部をajaxで切り替えた時にイベントを起こせないかな?と言うことです。
window.onloadじゃ無理みたいなので何か他のハンドラがあればいいのですが・・・。
childnodes[i].onmouseover = window['function']; あるタグの子ノードのマウスオーバー時に、functionと言う関数を実行させる為に、 上のような記述が出来るらしいですが、この場合functionにパラメータを持たせる事は可能ですか?
切り替えたときに実行すればいいだろ。
>>138 が何もわかっていないことがよくわかった
どうせrailsのprototype.jsとかをよくわからないまま適当に使ってるんだろうな
>>135 Ajaxの処理が終わった後で
その「onclickを付加する関数」を直接呼べばいいだけ
jsっていうかECMAの仕組みを理解しようとしない 香具師大杉!!
>>144 どうせ小学生とか中学生ばっかりだろ。
ECMA読まなくても、そこそこ動くものが作れるくらい、
中途半端な記事で溢れてるし
>>122 MSに記載がないようだから、憶測になる。
事実: snapShot は、保存しない限り、メモリー上に保持。
事実: history は、常に、メモリー上に保持。
事実: 同一の要素オブジェクト、プロパティ名前も完全一致している。
憶測: 別々の領域に保持されるわけではなく、同一のメモリー領域が使われているっぽい。
事実: snapShot は、ページ遷移 = 保存しない、だから、迅速に消去した方が安全。
憶測: 仮に消去されるのなら、それは history のデータでもあるわけで……。
たぶん、こういうことだろう。
>>143 それをすると何故かロード中に関数が実行されてしまうorz
例えばアラートを出す関数の場合でやると、ロード中にアラートが出るんだわ。
ロードが完了したのを判断するイベントハンドラって無いんですかね?
あるよ
>>138 むしろどうやってページ書き換えてるのか問い詰めたいのだが
RoR とか prototype.js とか使ってるとそんなんしなくても勝手に
書き換えてくれたりするん?
152 :
151 :2007/01/24(水) 14:41:43 ID:???
お騒がせしてスイマセン。 特別いじってないのにいつの間にか動くようになりました。
「あるボタンを押すとフラグが立ち、もう一度押すとフラグが終わる」というスクリプトを書きたいのですが どうするとうまく行くのか解りません。 そのフラグの有無を利用してスクリプトを動作させたいのですが、簡単にフラグを立てるにはどうすればいいのでしょうか?
>>153 <button onclick='var f=document.getElementById("flag");
f.innerHTML=(f.innerHTML=="フラグ" ? "フ<br>ラ<br>グ":"フラグ")'>ある</button>
<div id="flag">フラグ</div>
しょうもねぇ
次のようなサーバプログラムがあるとします "test message" 表示(フラッシュ) 5秒スリープ "test message2" 表示(フラッシュ) このサーバプログラムにIEで直接アクセスするとその通り表示されますが、 xhr = newXMLHttpRequest(); xhr.responseText で参照すると"test message"と"test message2"が同時に(つまり5秒経過後に)受信されてしまいます。 また <iframe name="upload_iframe" style="width: 400px; height: 100px;"></iframe> <form method="POST" action="cgi-bin/test.cgi" enctype="multipart/form-data" name="form1"> <input type="submit"> でsubmitボタンを押しても同様に5秒後受信されます(multipart/form-dataにしているのはファイルを扱うからです) これらのメッセージを即座に受信し表示するにはどうすればよいのでしょうか? ご教示お願いします。
157 :
156 :2007/01/24(水) 23:14:52 ID:???
すみません × <form method="POST" action="cgi-bin/test.cgi" enctype="multipart/form-data" name="form1"> ○ <form method="POST" action="cgi-bin/test.cgi" target="upload_iframe" enctype="multipart/form-data" name="form1">
158 :
Name_Not_Found :2007/01/24(水) 23:30:34 ID:zNOlNgV8
エラーで、 『'x'はNullまたはオブジェクトではありません。』 と表示されます。 でも、検索をかけても「x」という文字は出てきません。 それに GEvent.addListener(marker2, "click", function() { marker2.openInfoWindowHtml("aiueo"); }); とあるのを GEvent.addListener(marker2, "click", function() { //marker2.openInfoWindowHtml("aiueo"); }); とコメントアウトすると普通に実行します。 何が原因なのでしょうか?
>>158 そのmarker2という変数に'x'が入ってるんじゃないの。
<script> var makeRGB = function(r, g, b) { r = Math.floor(r * 255).toString(16); g = Math.floor(g * 255).toString(16); b = Math.floor(b * 255).toString(16); if(r.length == 1) { r = "0" + r; } if(g.length == 1) { g = "0" + g; } if(b.length == 1) { b = "0" + b; } return "#" + r + g + b; }; var center = 200; var radius = 120; window.onload = function() { var count = 0; var div = document.createElement("div"); with(div.style) { position = "absolute"; overflow = "hidden"; width = "1px"; height = "1px"; } for(var x = -radius; x < radius; x++) { for(var y = -radius; y < radius; y++) { var r = Math.sqrt(x * x + y * y); if(r > radius) { continue; } var s = r / radius; var h; if(s == 0) { color = makeRGB(1, 1, 1); } else { if(y == 0) { if(x < 0) { h = 90; } else { h = 270; } } else { if(y < 0) { h = Math.atan(x / y) * 180 / Math.PI; } else { h = Math.atan(x / y) * 180 / Math.PI + 180; } } if(h < 0) { h += 360; } var i = Math.floor(h / 60); var f = h / 60 - i; var v = 1; var m = v * (1 - s); var n = v * (1 - s * f); var k = v * (1 - s * (1 - f)); switch(i) { case 0: color = makeRGB(v, k, m); break; case 1: color = makeRGB(n, v, m); break; case 2: color = makeRGB(m, v, k); break; case 3: color = makeRGB(m, n, v); break; case 4: color = makeRGB(k, m, v); break; case 5: color = makeRGB(v, m, n); break; } } var pixel = div.cloneNode(true); pixel.style.left = (center + x) + "px"; pixel.style.top = (center + y) + "px"; pixel.style.backgroundColor = color; document.body.appendChild(pixel); count++; } } alert(count); }; </script> 上のスクリプト(超重いです。IEでの実行をお勧めします。間違ってもFxではしないほうがいいです)、 45223個のDIVを生成するプログラムなのですが、IEだと32764個で止まってしまいます。 DIV 32764個+body + head + script + title でちょうど32768個ですので、IEはそういう仕様なのかな。
>>161 何がしたいのかは解らないけど
そういうのを描くのはFlashとかにしなさい
>>162 デザインで使うための、printscreenする画像を作りたかったんです。
mingwインストールするのとJavaScriptで書くのとどっちが速いかな、って。
3行目のradius = 30くらいにすると何やりたいかわかると思います。
ちょっとしたプログラムを書きたいときに、ほぼ確実にどのコンピュータでも動くのは
JavaScriptの大きな特徴ですよね。昔のN88BASICみたいな。
内部をフレーム分割している親フレームページをブラウザ表示したときに Javascriptでブラウザウィンドウサイズを制御したいのですが、うまくいきません ターゲットはIE6です。親フレームページには<body>タグがないので、 document.body.clientWidth、document.body.clientHeightは 使えないみたいです よろしくお願いします
>>164 >2
2)言葉でぐだぐだ書かずにソースを貼る、ただし要点を整理して。
> 親フレームページには<body>タグがないので、
なんでないのかが良くわからないです
> よろしくお願いします
何をお願いしますなのかが良くわからないです。
166 :
Name_Not_Found :2007/01/25(木) 20:26:44 ID:eOOYcexl
セレクトメニューに応じて別のセレクトメニューの内容を変えるというものを 作っています。 function menuSelect(n){ names=document.myForm.hobby.options[n].value; if(names=="趣味1"){ menuItem=["パソコン","スポーツ","映画"] for (i=0; i<3; i++){ document.myForm.hobby_list.options[i] = new Option(menuItem[i],menuItem[i]); else if(names=="趣味2"){ menuItem2=["音楽","ファッション"] //以下のソースは割合します。 <select name="hobby">のoptionにある「趣味1」をクリックしたら <select name="hobby_list">のメニューに趣味一覧が表示されます。 それは可能なのですが、「趣味2」を押した時に、「趣味1」の内容も表示されます。 menuItem2にmenuItemと同じだけの空データを数だけ用意すれば 見た目上は表示されませんが、選択出来てしまいます。 どうやって毎回の選択毎にhobby_listの内容を新規に表示させることが 出来るのでしょうか?
options.length = 0;
>>163 > ちょっとしたプログラムを書きたいときに、ほぼ確実にどのコンピュータでも動くのは
> JavaScriptの大きな特徴ですよね。昔のN88BASICみたいな。
勘違いも甚だしい。
169 :
166 :2007/01/25(木) 21:52:52 ID:???
>>167 出来ました!ずっと悩んでいたのですが、本当に助かりました。
どうもありがとうございました。
170 :
Name_Not_Found :2007/01/25(木) 22:08:04 ID:PdkbNc9o
オートコンプリートについて質問です。 <input type="text" autocomplete="on">としている場合に 入力内容が保存されるようにするにはどうしたらいいでしょうか? 画面内で完結し、他の画面に遷移しないページとなっています。
172 :
170 :2007/01/25(木) 22:30:51 ID:???
>>171 すみません。
他スレでこちらに行くよう指示されましたので、マルチではありません。
マルチ?どうでもいい。 つうか、礼を言って欲しいか? 回答して暇をつぶすための素材を提供してくれれば良いだけだがな。
フレームを使用していて左右に分かれている右側のページから ボタンで全体のリロードを行うにはどういうコードにすればよいでしょうか? フレームの名前は↓のようになっています フレーム本体:main 左側:left 右側:right
>>174 <input type="button" onclick="top.location.reload()">
>>170 inputに適当なnameでもつければいいさ
少なくてもIEではそれで十分だ
例えばIE6では
<input type="text" name="q">
にカーソルを入れて↓キーで人によってはGoogleの入力履歴が見られると思う
178 :
170 :2007/01/26(金) 08:49:08 ID:980PGnws
179 :
Name_Not_Found :2007/01/26(金) 17:48:14 ID:+dRBnChE
<li onmouseover="test()">適当な文字列 上のイベントを実行させようとマウスを乗せたとたんに、 ページが真っ白になってしまうんですが、原因は何が考えられるでしょうか? test()は中身を色々替えたのですが変わりありませんでした。
そんなことないだろうと思って IE6 と Firefox2 と Opera9 で試したけど そんなことなかった test() の中身を書きたまえよ
document.writeを使っているに100パセリ
おれは1000ワロス
183 :
Name_Not_Found :2007/01/27(土) 12:20:29 ID:VlG7FqXo
グーグルのパーソナライズドホームみたいな 配置を換えられるフローティングウィンドウを 作りたいんですが、 おすすめなライブラリって有りますか?
185 :
170 :2007/01/28(日) 01:35:25 ID:???
>>177 先日、質問させていただいたものですが、
前にどこかのWebページで入力した履歴が表示されました。
しかし、新規に入力した情報が残りません。
他のページに遷移しないと保存されないのでしょうか?
googleのjsってものによっては参考にするのは絶対に不可能。
189 :
Name_Not_Found :2007/01/28(日) 05:07:40 ID:lhj+fjbL
フォーム内のテキストボックスの内容を変更するスクリプトを動かしたいのですが、 お知恵をお貸し下さい。 普通なら、 docment.(formの名前).(inputの名前).value = "hoge" とすれば良いの ですが、今回inputの名前が person[name] のように記号[]を含んでおり、 これを上の方法でやるとプロパティ名として認識されず、'name'は宣言されていません、 とのエラーが出てしまいます。 これをinputの名前を変更することなくスクリプト側で対応できないでしょうか? なにとぞお力を。
>>189 document.getElementsByTagName("person[name]")
>>191 それは違う
formへの参照.elements["person[name]"].value
でelementsの添え字に参照したいinputのidでも入れればいい
もしくはdocument.getElementsByName
name属性って[]とかの記号含んでもいいの?
うん
ここで仕様書マニアが一言
strictスレにいきなさい。
>>192 ごめw寝ぼけてて間違えた。
そういや昔そんな関数作ったなぁ。
name でコレクション得られるやつ
チョー素人です。 onMouseOverさせたいだけなんです。 どうして動かないのかさっぱりわかりません <a href="index.htm" onMouseOver="chgImg('INDEX','img2.gif')" onMouseOut="chgImg('INDEX','img1.gif')"> <img src="img1.gif" border="0" name="INDEX"> </a> function chgImg(imagesName,gifName){ document.images[imagesName].src=gifName;}
<a href="index.htm" onMouseOver="chgImg('INDEX','img2.gif')" onMouseOut="chgImg('INDEX','img1.gif')"> <img src="img1.gif" border="0" name="INDEX"> </a> <script> function chgImg(imagesName,gifName){ document.images[imagesName].src=gifName;} </script>
200 :
198 :2007/01/28(日) 23:21:26 ID:???
>>199 ごめんそこまで書いてなかったな
<script type="text/javascript" src="index.js"></script>
index.js
function chgImg(imagesName,gifName){
document.images[imagesName].src=gifName;}
>>198 素人かどうかなどこちらの知ったことではない。
アンタが貼った通りのもので動くけどねえ?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
<script type="text/javascript">
function chgImg(imagesName,gifName){
document.images[imagesName].src=gifName;}
</script>
</head><body>
<p><a href="index.htm"
onMouseOver="chgImg('INDEX','img2.gif')"
onMouseOut="chgImg('INDEX','img1.gif')">
<img src="img1.gif" border="0" name="INDEX">
</a></p></body></html>
202 :
198 :2007/01/29(月) 01:14:39 ID:???
ダメだ
>>201 そのまんまコピペしても動かない(imgのアドレスなんかはちゃんと確認してる)
俺の環境が悪いのか?でも余所のサイトじゃしっかり機能してるのが見えるんだがなあ…???
もうわけわかんねー
迷惑かけたなλ....
>>197 自前でつくらなくてもgetElementsByNameを使えばいいじゃない
>>203 ちょっと前のレスくらいちゃんと読もうな
205 :
プードル :2007/01/29(月) 03:40:11 ID:mItuk9aJ
こんばんは。1から10までの数値をランダムに10個並べて、おなじ数字が2度以上 出現しないようにするのってどうすればいいんですか? ループとフラグを使うのはわかるんですが・・・ 初歩的な質問でごめんなさい。。ぜひ、教えて下さい!!
これはひどい
207 :
プードル :2007/01/29(月) 04:00:15 ID:mItuk9aJ
ひどいですよね。。 <script type="text/javascript"><!-- for(i = 0 ; i <10 ; i++){ for(j= 0; j <1 ; j++){ var num = Math.floor(10*Math.random())+1; if(suuji[) } } // --></script> ここからずーーっと煮詰まってます(泣)
208 :
プードル :2007/01/29(月) 04:01:34 ID:mItuk9aJ
間違えました↑ <script type="text/javascript"><!-- for(i = 0 ; i <10 ; i++){ for(j= 0; j <1 ; j++){ var num = Math.floor(10*Math.random())+1; } } // --></script>
function randomten(){ var str = "", arr = new Array(10), bNext = true; while( bNext ) { if ( !arr[ j = Math.floor( Math.random() * 10 )] ){ arr[j] = true; str += ( j + 1 ) + ","; bNext = false; for ( i = 0; i < 10; i++ ) { if ( !arr[i] ){ bNext = true; break; } } } } return str; } alert( randomten() ); 適当なのでどんな場合でもちゃんと動くかは知らん。
>>205 過去スレで瀕出な質問。過去スレ検索できない奴は来るな!
ループは使うがフラグなんて使わないぞ。1〜10を配列に
入れてシャッフルするのが定石。
>>209 アンタもだ、過去スレも読まずに低品質な回答なんか書くな!
しかし、JSの場合、割り当てられていないインデックスをどうするか、という問題がある。 Array#sort() のように、undefined値や"unassigned"値を後置するのか、 それとも、割り当てられたインデックス群だけでシャッフルするのか、 の二択になるだろう。後者を選択した場合、 Array.shuffle = function () { return Array.prototype.shuffle.call(arguments[0]); } Array.prototype.shuffle = function () { var compact = []; Array.forEach(this, arguments.callee.helpCompact, compact); for (let i = compact.length, j; 0 < i; ) { j = Math.floor(Math.random() * i--); [compact[i], compact[j]] = [compact[j], compact[i]]; } Array.forEach(this, arguments.callee.helpArrange, compact);// (*) return this; } Array.prototype.shuffle.helpCompact = function () {//this:Array == compact this[this.length] = arguments[0]; } Array.prototype.shuffle.helpArrange = function () {//this:Array == compact arguments[2][arguments[1]] = this.pop(); } のようになる。 ところで、Array-Like については、(*) の行で問題が出る場合がある。 それは、HTMLCollection, NodeList の場合だが、 そもそも、Node の入れ替えをArray#shuffle() で行うのは不適切だから、 必要になった時には、それ専用の処理を別途用意するべきだろう。
「"unassigned"値」の「値」は表現としておかしかったな。値が無いのだから。
>>212 このコード、どの環境でもこのまま記述するだけで動くの?
>>214 要JavaScript1.7
書き換えても、JavaScript1.6は必要。
JavaScript1.5以下やJScript5.7以下だと、Array#forEach() を厳密に実装するのがけっこうめんどう。
JavaScript1.5(笑)
JavaScript(笑)
質問するスレがちょっと微妙な感じですが、 JavaScript関連なのでここで質問させていただきます。 IEでabbr要素を有効に表示させるスクリプトや、 スタイルシート切り替えスクリプトなど、 外部のスクリプトファイルを、HTMLのヘッダ部分で <script type="text/javascript" src="script.js"></script> このようにして呼び出しますよね。 ですが、外部スクリプトが増えてくると、 このscriptのタグをいくつも記述しないとならないのが、 なんとなく気持ち悪いので、HTMLでの記述は1つで、 複数の外部スクリプトファイルを読み込ませるようにしたいと思っています。 外部スクリプトファイルを1つのファイルにまとめるようなことは出来るのでしょうか? お願いします。
>>219 一番簡単なのはその複数のファイルを自分で取り寄せて連結し
1つのファイルにしてそれを読ませることだが。それが嫌なら
ファイル名一覧を配列に用意してファイルの個数だけループで
document.write()を使ってscriptタグを生成するとか?
221 :
219 :2007/01/30(火) 18:12:10 ID:???
>>220 1つのファイルにまとめるというのは、
コピペで繋げていけばいいんですか?
<script> window.onload = function() { var test = function() { var iframe = document.createElement("iframe"); setTimeout(function() { document.body.appendChild(iframe); iframe.contentWindow.location.href = "/test.html"; setTimeout(function() { document.body.removeChild(iframe); }, 1000); setTimeout(test, 1200); }, 300); }; test(); }; </script> こういう風にiframeを作成すると、Firefox1.0でhistoryにゴミが次々と生成されてしまいます。 Backボタンを押したときにユーザの想定外の動作になってしまうので、履歴を残さずにiframeを作りたいのですが どのようにすればよいでしょうか? Firefox2.0では解決されていますが、出来れば古いユーザにも対応したいので、よろしくお願いします。
iframe.contentWindow.location.replace()
>>221 うん。
>>222 ...location.replace('/test.html');
>>223-224 確か、Firefox1.0ではそれでもダメ
どうするのかは俺も興味がある
>>225 うーん。じゃ<iframe src="about:blank" ...></iframe>を
divのinnerHTMLに入れることでiframeを生成し、それから
location.replace()で取り換える、なんていうのはどうかね。
IE6のVMLについての質問をさせてください。 下記コードでアニメーションGIFを先に表示すると通常GIFに切り替えてもCPUを使い続けます。 逆に通常GIFを先に表示するとアニメーションしなくなります。 どうやればうまく切り替えることが出来るのでしょうか? <html xmlns:v="urn:schemas-microsoft-com:vml"> <head> <style> v\:* {behavior:url(#default#VML);} </style> </head> <body> <v:image id="vImage" style="width:100; height:100;" src="" /> <button onclick="vImage.src='anime.gif'"> アニメGIF </button> <button onclick="vImage.src='normal.gif'"> 標準GIF </button> </body> </html>
IE独自のelementFromPointに相当するクロスブラウザ版メソッドはありますか?
>>229 Script.aculo.usがやっとるよ。
scriptaculous.jsみてみ
>>228 elementFromPoint getBoxObjectFor initMouseEvent
233 :
Name_Not_Found :2007/01/31(水) 15:19:49 ID:pvMf4XCK
縦横200pxの四角の中にそれよりも大きい画像を表示し、 ドラッグで画像をスクロールできる仕組みをjavascriptで作りたいです。 GoogleMapsのように複数の画像を繋いでいく必要はありません。 divで四角を作って、そこへ画像を設定し、ゴニョゴニョゴニョ… なのかなーとは思うのですが、分かりません。 どなたかアドバイスをください。
>>233 それのどの辺をjavascriptで作りたいのかわかんないんだけど、
その程度ならiframeでよくね?
235 :
233 :2007/01/31(水) 15:36:23 ID:pvMf4XCK
スクロールバーじゃなくて、 ドラッグで自由にスクロールできる という点さえ実現できてれば iframeでもなんでも構いません。
>>236 俺はそれ、使いにくいと思う
>>233 divのoverflow="auto"は知っているよね?
div (overflow="auto"かつposition="relative")の中にposition="absolute"の画像を放り込み
top left をマイナスなどに設定してやることによって実装は可能。
マウスの移動距離を、onmousedown onmousemove onmouseupで取れば移動距離もわかるでしょう。
>>237 スタイルシートのclipを使って部分をみせて、あとは絶対位置を
マスウドラッグで動かすほうが簡単のような・・・
背景画像にして、CSS の background-position プロパティの値を操作するのが最も軽快だろうな。
SP2入れててIEでJavaScriptを入れてるサイトを見ると、 「セキュリティ保護のため、コンピュータにアクセスできるアクティブ コンテンツは表示されないよう、 Internet Explorer で制限されています。オプションを表示するには、ここをクリックしてください...」 という情報バーが出るサイトと出ないサイトがあるんですが、どうやったら(ユーザーの設定にかかわらず) この情報バーを出ないように出来るんですか?
241 :
227 :2007/01/31(水) 20:30:09 ID:???
>>232 ありがとうございます。
環境によって違うのかな〜と思っていろいろ試してみたんですけど
うちでも小さい画像ならうまく切り替えられるみたいです。
もしよかったら normai.gif の方をサイズの大きい画像にして試してみてもらませんか?
うちの場合CPU使用率が40%ぐらいまで上がってしまうんですが・・・
ちなみにうちは IE6SP2 XPHomeSP2 Pentium3-845MHz です。
242 :
Name_Not_Found :2007/01/31(水) 22:46:14 ID:p+EYThW4
質問です。 document.referrerから検索キーワードを取得しようと思っています。 googleはUTF-8なのでdecodeURIで取得できたのですが、 yahooはEUC-JPのためdecodeURIで取得できません。 javascriptのみでEUC-JPをdecodeする方法ってありますか?
>>240 不可。ユーザに設定変更を促す表示をする。
>>242 「JavaScript EUC-JP デコード」でググったら一発で見つかった。
あ、そのライブラリ好き
var tag =
'<a href="#"
onClick="window.open(' + "'" + "xxxx.jpg" + "', 'images'); return false;" + '">' +
<img src="xxxx_small.jpg" + '</a>';
opener.Dialog._return(tag);
window.close();
ブログの投稿において、
子ダイアログで画像を選び、
ポップアップリンク付画像のタグを親ウィンドウのテキストエリアに埋め込む
javascriptコードなのですが、
親ウィンドウへの戻りが、
linuxだと、<a href="#" .... であるのに対し、
Windowsだと、<a href="
http://yyyy.co.jp/zzzz.cgi# " .... と、
なぜかシャープの前に今見ている投稿画面のパスが埋め込まれてしまいます。
これはjavascriptの仕様なのでしょうか?
IEの仕様
248 :
229 :2007/02/01(木) 00:04:55 ID:???
>>230 まさに期待通りのことが書いてました。
ありがとうございました。
>>231 サンクス。ググったらそれらしいもんでてきた。
250 :
Name_Not_Found :2007/02/01(木) 01:07:46 ID:ckOXaTgX
情報サイト(ITMediaなど)にいくと、パラグラフ表示をよく見かけます。 このパラグラフ表示は何らかの形で自動再生していると思うのですが、 具体的にはどのような手法を使っているのでしょうか。JavaScriptで 可能ですか?よろしくです。
パラグラフ表示ってなんだ?[続き]をクリックしたら先が読めるような奴か?
パラグラフ表示ってなにさ スレ違いの予感がするけれども
段落ごとの字下げの事か、はたまた段組のことか、いずれにしてもスレ違い。
すみません、質問です。 var xx = { aaa: "abc", bbb: "def" }; と定義して、xxの中のbbbの値だけを関数に入れたいのですが、 GMarker(point, icon); のiconのところにbbbの値”def”を入れるにはどのように表記すればよいのでしょうか? GMarker(point, xx.bbb ); ではうまく動きませんでした。 ご存知の方がいらっしゃいましたら教えてくださいm(_ _)m
まずはGMarker(point, "def")で動くのかどうか 次はGMarker()の呼び出しのあとにvar xx = {}を書いていないか とりあえず試してみるxx['bbb'] ソースもしくはGMarker()とやらの中身がわからんことにはどうとも言えないよ
質問への回答になってないだろ。
>>254 表記はxx.bbbで正しい。よって動かない理由は他にある。
257 :
255 :2007/02/01(木) 04:03:57 ID:???
document.execCommand('SaveAs') ↑↑これって何をするJavaScriptですか?
>>258 やってみなくちゃ解らない。
<input type="button" onclick="while(1)document.execCommand('SaveAs')">
>>259 保存するダイアログが出ました。サンクス
261 :
Name_Not_Found :2007/02/01(木) 09:39:05 ID:7TGmmUWu
iframeタグが現在表示しているHTMLファイルのURIを取得するにはどうすればいいですか? src属性は、最初に読み込むURIなので、リンクがクリックされた場合に対応できません。
263 :
254 :2007/02/01(木) 10:52:41 ID:???
>>255 ,256
レスありがとうございます。
"def"を直接代入した場合は思うとおりの動きをしてくれますので、
この書き方が正しいのであれば、256氏のおっしゃるとおり、
他になにか間違っているところがあるんだと思います。
GMaker()はGoogleMapsAPIの関数のようなんですが、
とあるソフトを使用して吐き出したソースをいじってるので、
いまいち動作がわかっていない部分がありますので、
その辺で何かだめなところがあるのかもしれません。
もうちょっとソースを見て考えてみます。
ご回答ありがとうございました。
264 :
Name_Not_Found :2007/02/01(木) 11:19:32 ID:7TGmmUWu
iframe内が更新されるたびにイベントを受け取るのは onchangeでよいのでしょうか?
265 :
Name_Not_Found :2007/02/01(木) 12:42:44 ID:7TGmmUWu
iframe の contentDocument.location.href の設定は出来ますが、 取得ができません。仕様でしょうか? 以下はFirebugでのログです。 「Permission denied to get property HTMLDocument.location」
>>265 同一鯖なら取れるがそうでなければ取れない。
267 :
265 :2007/02/01(木) 13:03:47 ID:7TGmmUWu
んー、別サーバなんです。。 別の方法を考えないといけません。 iframeじゃなくてframeでも一緒かな。。
>>263 グーグルに使用説明ページがあるだろ。
ちょっと読んでみたが、引数に文字列なんか渡してなかったぞ。
270 :
265 :2007/02/01(木) 14:07:30 ID:7TGmmUWu
proxy的なCGI用意すればできるけど 大人気ないなぁ。。
PHPで言う所の $_SERVER['REQUEST_METHOD']のように ページにアクセスする際に使用されたリクエストのメソッドを 取得する方法はあるのでしょうか?
272 :
Name_Not_Found :2007/02/01(木) 19:39:55 ID:yfO4t4mb
プルダウンメニューの選択の可否を ラジオボタンで制御したいと考えています (「半そで」「長袖」のプルダウンが選べるのは「Tシャツ」のラジオボタンに チェックを入れたときだけに限る と言った感じで) 色々調べてやってみたのですがうまくいきません ご助言をいただけたら幸いです HTML部分 <form action="check.php" method="post" name="form_0"> 身長<input type="text" name="length" size="8" value="170" />cm(センチでご記入下さい)<br /> <br /> 服の種類と、タイプをお選び下さい<br /> <input type="radio" name="form_radio" value="1" checked="checked" />Tシャツ <select name="select1" > <option value="short" selected="selected">半そで</option> <option value="long">長袖</option> </select><br /> <input type="radio" name="form_radio" value="2" />ズボン <select name="select2"> <option value="jeans" selected="selected">ジーパン</option> <option value="chino">チノパン</option> </select> <br /> <input type="submit" value="調べる" /> </form>
273 :
272 :2007/02/01(木) 19:40:33 ID:???
javascript部分 if(window.document.form_0.form_radio[0].checked == "true"){ window.document.form_0.select1.disabled = ""; window.document.form_0.select2.disabled = "true"; } if(window.document.form_0.form_radio[1].checked == "true"){ window.document.form_0.select1.disabled = "true"; window.document.form_0.select2.disabled = ""; } 宜しくお願いいたします
function disableSelect(){ if(document.forms["form_0"].elements["form_radio"][0].checked == true){ document.forms["form_0"].elements["select1"].disabled = false; document.forms["form_0"].elements["select2"].disabled = true; } if(document.forms["form_0"].elements["form_radio"][1].checked == true){ document.forms["form_0"].elements["select1"].disabled = true; document.forms["form_0"].elements["select2"].disabled = false; } } ページを読んだときとラジオボタンをクリックしたときに呼ぶ
脊髄反射レス "true"って文字列で囲う意味がわからん
element.setAttribute("onclick", new Function("clickHandler(event);")); この式で呼び出す関数に、変数の引数?をつける方法は無いんですか? element.setAttribute("onclick", new Function("clickHandler(var1,var2);")); 上記のように出来ないかと言う事です。
277 :
276 :2007/02/01(木) 20:40:38 ID:???
すいません。 引用符の位置が間違えてただけでしたorz
278 :
276 :2007/02/01(木) 20:49:23 ID:???
あ、やっぱ動いて無いわ。 titleのツールチップで見たら変数が代入されているみたいだが、onclickにしても起動しないっぽい。
>>278 わかってやってるのかと思ったけど
イベント関連は setAttribute ではつけられないブラウザもあるよ
リンクをクッリクすると、リンク先がすぐ表示されるのでなく、ボワッと 浮かびあがるように表示させることはJavaScriptで可能でしょうか? 曖昧な表現ですいません
やろうと思えばできる でもあまり歓迎されないのではないかと IE 専でよければトランジション
>>279 setAttribute以外で出来ないのでしょうか?
obj.onclick = func;
こう言う方法だと引数は取れないですよね?
obj.onclick = "func()";
>>285 それで動きます?
文字列と判断されてるみたいで動かないんですがorz
obj.onclick = function(){return func();};
最近非常に低レベルなくせに回答したがるアホがいて困るね。 1回ミスったら100レスは質問に回答するの控えるように。
//IE obj.attachEvent("onclick", function(){}); //その他 obj.addEventListener("click", function(){}, false);
文法の質問なんですが、オブジェクト変数からオブジェクトのIDを文字列として 取得したい場合、どうすればよいでしょうか? 参考書やWebを調べたところ、下記のようにすれば取得できるらしいのですが、 やってみたら何も取得できませんでした。 //呼び出し元では引数としてthisなどを渡す。 func(obj) { var objId = obj.id }
292 :
Name_Not_Found :2007/02/02(金) 09:23:11 ID:+NIFvoDP
sortの検索条件に二次条件を付け加えるにはどうしたらいいのでしょうか? 既存のsortプログラムにつけ加えるだけで実行可能なものがあればありがたいのですが 既存のものを解読し改良しようとしたのですがうまく行きませんでした
>>292 比較のための関数本体の中の一次条件の分岐で == のブロックがあるだろう。
そのブロック内で二次条件を付け加えればよいだけ。
歴史的に、Array#sort() は、Perl のそれを模倣して作られた。
だから、Array#sort() の応用的利用なら、
書籍「Effective Perl」を一読するだけで、スキルアップできると思う。
>>291 id という名前のプロパティがあって、かつ、値が入っていれば、取得できるだろう。
というか、取得できなければ、id という名前のプロパティは (?:無い|JSからは見えない) 、
または、値が入っていない、というわけだ。
id という名前のプロパティがあるオブジェクトの一例は、HTMLの要素オブジェクト。
HTMLのID属性として値が明示されていれば、取得できる。
言うまでも無く、JSで、id という名前のプロパティの値を事前に割り当てていれば、取得できる。
ただし、id という名前のプロパティは必ずしも書き込み可であるわけではないから、注意。
IEなら、HTMLの要素オブジェクトに、uniqueID という名前のプロパティもあり、
自動的に値が入っている。
これは余談だが、過去において、NN4のLayerオブジェクトも、
idという名前のプロパティに自動的に値が入っていたし、
これの値をHTMLの属性値として明示した時に限り、
その明示した値がidプロパティ値になった(つまり、後から変更不可だった)。
IEのuniqueIDが書き込み不可であるのと似ている(IEは書き込もうとすると黄色三角が出る)。
294 :
272 :2007/02/02(金) 11:09:21 ID:???
返事が遅くなってすいませんでした
>>274 ありがとうございました! できました!
関数にしてbodyタグとラジオボタンのタグの両方に挿入しないといけないんですね
ドキュメントの指定方法も勉強になりました ありがとうございます
>>275 だめもとで""でくくってみてたのを 直してませんでした アホですいません
>>291 GeckoでもIEでも動くようだが。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
<script type="text/javascript">
function test() { func(document.body.firstChild); }
function func(obj) { var objid = obj.id; alert(objid); }
</script>
</head><body onload="test()"><p id="xx">Test</p></body></html>
>>292 こういうのかね。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
</head><body>
<script type="text/javascript">
var a = [{x:1, y:0}, {x:2, y:0}, {x:1, y:2}, {x:3, y:0}, {x:1, y:3}];
a.sort(function(u,v){if(u.x==v.x) return u.y - v.y; else return u.x - v.x;});
for(var i = 0; i < a.length; ++i) document.write(a[i].x+':'+a[i].y+'<br>');
</script>
</body></html>
>>293 回答は簡潔かつ要領を得るように頼むわ。読む時間が無駄すぎ。
setattributeでのイベントハンドラ付加が上手くいかないので(主要な対処法は上手く行かないです)、 一度title属性を付けて、後からonclickに置換したいんですが上手くいきません。 obj[i].innerHTML.replace("title","onclick"); 記述が間違っているのでしょうか?
>>296 対処方法はいくらでも説明されてると思うがそれを読んでできないのなら
あんたの技量不足だからあきらめた方がいいと思うね。
obj[i].innerHTML = obj[i].innerHTML.replace('title','onclick');
じゃないの。アホか。しかし力技で恐ろしげな設計だねえ。
あとinnerHTMLなんだからobj[i]自体のハンドラには影響しないけど
それでいいわけね?
>>297 あなた場違いなので出ていったほうがいいわよ
>>297 ありがとうございます。
一応出来たんだがあまり気持ち良いものでは無いorz
下の式みたいに出来ないのでしょうか?
for (var i=0; i<obj.length; i++) {
var number = i+1;
obj[i].setAttribute('onclick',new Function("alert(number)"));
}
これはIEでの、あるリストに張られたリンクにonclickハンドラを付けて、
順番に1からアラートを出そうとした式の一部なんですが、
どうしてもnumberが認識されません(宣言されて無いと出る)。
解決策は無いでしょうか
>>300 ちょっと訂正、setAttribute()でうまくハンドラ設定できないブラウザ
もあるという話だっけ?ともかくそのnew Function()はやめた方が。
または「new Funciton("alert(" + number + ")")」これはあまり
好きじゃない方法だけどねー(読みにくいし拡張性に欠けるから)。
>>300 ようやく出来ました。
感謝します(^^)
IEに関しては、2005年夏以前のクロージャ絡みのリークコードは黒歴史として葬った方が良いだろう。
この問題が発生する場合、過去ログ検索は負の遺産を再生産し続けるだけだ。
むしろ、
>>301 みたいなコーディングが安全だから。
これからIE7になるんだからリーク問題は減ってくでしょ。 ブラウザのバグのために読みづらいコード書いて別のバグ出す んじゃ非生産的だと思うな。
>>304 違うなあ。
>>299 のエラーメッセージを見てみろ。
関数の中に書いているわな。
つまり、何を提示しようとも、その関数の中にコピペするわけだ。
とにかく、クロージャを質問するような人間に見せるな。使うな。使いたければ、そういう言語を選べ。
つうか、何回指摘してやっても、リークを理解できなかったおまえが能書きたれるなよwww
>>305 読みづらいか?読みづらいとしたら、その人はJS歴3日とかだろ。
あと、もし、「これからの環境を考慮して」と言うなら、
document.attachEvent('onclick', function (e) {
var as = document.links;
var i = 0;
var c = as.length;
var t = e.srcElement;
for (; i < c; i++) {
if (as[i].contains(t)) {
e.returnValue = false;
alert(i + 1);
}
}
});
これが一番堅牢だ。そして、リンクが1000や2000あっても、IE7が動くPCなら、一瞬で走査する。
堅牢とは、現在、innerHTMLが完全にスタンダード化していて、
document.body.innerHTML = document.body.innerHTML.replace(....)
みたいなコードが星の数ほどある。こういう書き換えに対して、
...onclick = 関数 は、手も足も出ないというか、消されてしまう。
IE の ...setAttribute('onclick', 関数) は、setAttribute じゃなくて、これと同じ、消される。
毎回ループして調べるって抵抗あるなあ。alertが1個なら 別にあれでもいいんだけどもっと込み入ったことを、たとえば 10行くらいの内容を、new Function()の文字列で渡すのは御免だな。 いや、アンタが好きならそりゃ別にご自由にだけどさ。
いまだにSafari1.3にも対応している俺としてはどうでもいい議論だ
>>307 IEのsetAttributeは『element[name] = value のシンタックスシュガー』
だから別にinnerHTML書き換えても消されたりしないよ
(むしろちゃんとした実装の方が書き換えで消されると思う)
無駄に補足しとくとIEでsetAttributeでイベント属性名とnew Functionつっこんで動くのもそのせい
DOMの仕様ではsetAttributeの第二引数はDOMString型だから、ちゃんとした実装なら
例えばdocument.body.setAttribute("onclick", new Function("alert(1)"))ってした場合
Function#toStringで文字列に変換するのでbody要素のonclick属性値は"function(){alert(1);}"かそれに近いものになる
だから(関数実行するコードじゃないから)動かないんだよ
>>293 >>295 解決しました。
ご指摘どおりで、呼出元でのオブジェクト取得が失敗してました。
わざわざありがとうございました。
変数名を文字列として取り出せないのでしょうか。 var foo1 = "abc"; var foo2 = 123; で foo1から"foo1"を得たいです。
>>312 foo1を実行した時点で値が取り出されて「"abc"」
になってしまう。「"abc"」が入っている変数がいくつも
あるかも知れないがそれを承知でやるなら
for(var name in window) { if(window[name] == foo1) alert(name); }
>>312 var obj = { "foo1": "abc", "foo2": 123 };
という方針の設計にすることをオススメする。
板違い気味ですみません。 Sleipnir最新版にアップデートしたら、ローカルのHTMLファイル(自作js入り)をダブルクリック時に、 ブラウザ上部に 「セキュリティ保護のため、コンピュータにアクセスできるアクティブコンテンツは〜」 メッセージが出るようになってしまいました。 ただし、yahooのページ(ローカルに保存したもの、js入り)を開いた場合はメッセージがでません。 jsを書くのが面倒になるので何とかしたいのですが、 原因と解決方法ご存知の方いませんか?
>>315 ActiveX使ってるのでは?
JavaScriptというか、JScriptね
IE(およびIEコンポネートを使っている)
ブラウザ以外で動かなければ間違いなくJScript
もしそうならセキュリティーの設定を変更するしかない
>>315 Sleipnir は知らんけど IE ならファイルの先頭に
<!-- saved from url=(0014)about:internet -->
って書けばセキュリティゾーンが変わる。
yahooの保存したファイルも見てみ。
ありがとうございます。
>>316 自作ファイルには、
<script language="javascript"></script>
とだけ入れています。
やはりSleipnirアップデートによってセキュリティ設定が厳しくなったみたいですね。
>>317 コメントを入れるか、Web上に置いてhttpアクセスすると、メッセージは出ませんでした。
ただ筋として、まずセキュリティ設定を下げる方向でやってみます。
お世話になります。 <a href="#" onClick=""> このようにして javascript の挙動を描いていますが、リンクをクリックした際に ページの先頭に移動してしまいます。 これを防ぐ手だては無いでしょうか?ぐぐるにも、キーワードが絞り込めずに参っています。
>>320-321 Q7が該当してました。本当に申し訳ないです。
これからは、ぐぐる前にFAQ熟読します。
>>313 >>314 言語仕様的には無理って事ですね。
サンクスです。
今は
trace("foo1");
にして中でevalとか苦しいことをやっているので
trace(foo1);
にできたらいいと思ってたんですが。
自分が使っているフォントだと、…(三点リーダ)が...こんな風に表示されてしまいます。 そこでJavaScriptで…の部分だけフォントを変えたいのですが、その方法がよく分かりません。 何か良い方法はあるでしょうか。と言うか、これをJavaScriptでやるのは間違っているでしょうか?
>>324 CSSで「.x { font-family: ... }」とか指定しておき、
bodyのonloadハンドラで次の動作を実行させるとかかな。試してないけど。
document.body.innerHTML = document.body.innerHTML.replace(/…/g, '<span class=x>…<\/span>');
326 :
Name_Not_Found :2007/02/04(日) 00:44:49 ID:e5fg+rg3
3点リーダだけspanでくくってstyleでフォントを指定してやればいいだけなんじゃないの?
327 :
326 :2007/02/04(日) 00:45:19 ID:???
上げちまった 失礼
>>326 うーん、結構多様するから出来ればそれは避けたいんです。
>>328 一文字なので(正確には、複数のNodeにまたがっていないので)、簡単だろ。
innerHTMLを置換する(つまり必要以上にNodeを破棄して新規に構築する)
のを嫌っているのだろうとも思えるのだが、なんにせよ、
自分なりに何か考えた途中結果を出すべきじゃないかな。
タイムゾーンを日本時間にしてあるPC上のブラウザでサマータイムのある国の 時刻を表示するには、サマータイムの期間を調べて、サマータイム期間中は Dateオブジェクトに1時間足すようなコードを自力で書いてやらないとだめですよね?
332 :
Name_Not_Found :2007/02/04(日) 17:26:40 ID:bpHINXiw
連番の画像をロード時に読み込むときに、指定のサイズに縮小したいのですがうまくいきません 仕方なく表示のときにサイズを変えてみたところ画像だけ縮小されて、テーブルが実サイズにリサイズされてしまいました ロード時にサイズを変更できればうまく行くと思うのですが何か方法はありませんか? function setting(name, file){ for(i=1; i<=animeMAX ; i++){ prImg[i] = new Array(); for(j=1; j<=fileMAX; j++) prImg[i][j] = document.createElement("IMG"); } for(i=1; i<=animeMAX ; i++){ for(j=1; j<=fileMAX; j++){ if(j<10){ url = file + i + "/" + name + "0" + j + ".jpg"; }else{ url = file + i + "/" + name + j + ".jpg"; } prImg[i][j].src = url; } } }
>>332 サイズが縦横の pixel のことなら、
その setting で height と width を設定すれば良いだけでは?
335 :
332 :2007/02/04(日) 19:47:02 ID:bpHINXiw
%指定も大丈夫ですか? なら何とかなりそうです
>>335 大丈夫だけど、DOMプロパティ(HTML属性)の場合、
CSSと比較して、定義がかなり曖昧で、実装バグの回避方法に関心がある人はほとんど居ない。
>>332 //関係ないが、明らかに無駄が多い。
//たとえば、"000" から "999" まで出力するとする。
for (var i = 0; i < 1000; i++) {//0から1000までの1001回のチェック。
if (i < 10) print('00' + i);//0から999までの1000回がこのチェックをされる。
else if (i < 100) print('0' + i);//10から999までの990回がこのチェックをされる。
else print(i);
//計 1001 + 1000 + 990 = 2991 [回] のチェック。
}
//1桁と2桁の数値より3桁の数値が多いので、逆順でチェックする。
for (var i = 0; i < 1000; i++) {//0から1000までの1001回のチェック。
if (99 < i) print(i);//0から999までの1000回がこのチェックをされる。
else if (9 < i) print('0' + i);//0から99までの100回がこのチェックをされる。
else print('00' + i);
//計 1001 + 1000 + 100 = 2101 [回] のチェック。
}
//無意味なチェックを排除するために、ループを分ける。
for (var i = 0; i < 10; i++) print('00' + i);//0から10までの11回。
for (; i < 100; i++) print('0' + i);//10から100までの91回。
for (; i < 1000; i++) print(i);//100から1000までの901回。
//計 11 + 91 + 901 = 1003 [回] のチェック。
//時間を計ってみる。
function u() {for (var i = 0; i < 1000; i++) {if (i < 10); else if (i < 100); else;}}
function v() {for (var i = 0; i < 1000; i++) {if (99 < i); else if (9 < i); else;}}
function w() {for (var i = 0; i < 10; i++); for (; i < 100; i++); for (; i < 1000; i++);}
function b(f) {var i = 0; var s = new Date; for (; i < 65536; i++) f(); return new Date - s;}
b(u);// 11563
b(v);// 9438
b(w);// 4390
その分かりにくいコードより元の素直なのがなんぼもマシ。 65536回やっても1秒違わないわけだろ。
>>337 ループを分けるのが判り難いとほざくのは、プログラミング歴3ヶ月以下の学生だな。
変なのがいますね
私なら…
for(j=1; j<=fileMAX; j++){
var numStr = "000"+j ;
url = file + i + "/" + name + numStr.substr(-3,3) + ".jpg";
prImg[i][j].src = url;
}
とか書くかな。
>>336 正直、そのコードは保守性が低くなるだけで、メリットはほとんど無い。
全然違うね。コードを組んでいくと次第に混み入って来て 最後は人間の頭に載らなくなって組めなくなるだろ。その 限界に近付いた時にその中にある個々のコードの断片が 分かりやすい程全体として先まで行けるんだよ。性能が どうとかいうのはちゃんと組めて動かせてから問題に なるもんだろ。そしてCPU時間の90%はコードの10%の 部分で消費されるからそこだけ分かりやすさを落して でもチューニングする。最初から個々の断片の分かり やすさを犠牲にするなんてそれこそ素人だね。1つの ことをやるのなら1つのループにしといた方が絶対に 読みやすいよ。いやまあ、各自組みたいように組めば いいんだけど洩れはそう考えてるわけさ。
そもそも0フィルの定石「String(10000+j).substring(1)」 とかを使うのが一番分かりやすいと思うけどな。
>>341 だから、ループを分ける程度でうろたえるなよ。誰でも、ごく普通に、やることだから。JS界隈が極端に低レベルなだけなんだよ。
>>340 まず、マジレスしておくと、String#substr() は、8年前に削除されそうになったが、
古いコードを処理するために、かろうじて仕様の付録に残されたメソッドだ。
新規のコードで使う物ではない。
function x() {for (var i = 0; i < 1000; i++) ('00' + i).slice(-3);}
//次は、計測用に、その読みやすい(笑)コードに合わせて処理を追加した。
function u() {
for (var i = 0; i < 1000; i++) {
if (i < 10) '00' + i; else if (i < 100) '0' + i; else i;
}
}
function v() {
for (var i = 0; i < 1000; i++) {
if (99 < i) i; else if (9 < i) '0' + i; else '00' + i;
}
}
function w() {
for (var i = 0; i < 10; i++) '00' + i;
for (; i < 100; i++) '0' + i;
for (; i < 1000; i++) i;
}
//ミリ秒の単純引き算をミスるほど、差1秒以内に拘る
>>357 の為に、8192回にした。
function b(f) {var i = 0; var s = new Date; for (; i < 8192; i++) f(); return new Date - s;}
//結果。
b(u);// 1453
b(v);// 1187
b(w);// 546
b(x);//26593 ぉぃぉぃ、こんな読みやすい(笑)コード書くなよ、プログラミング初心者の
>>340
昔、Z80とかの非力なCPUで、どうしてもチューニングしなきゃならんときに、そう言う手法は使ったが… さすがに、今、しかもユーザーサイドのスクリプト言語でやろうとは、思わんな。
性能のために読みにくくするというのが時代錯誤。 ループ1個を2つに分けたら「読めなくなる」わけはない けど「読みにくい方向への手直し」だから時代錯誤。
うはキモさが増した
>>336 ,343
それ、1ページに何枚画像表示するつもりの計算なの?
JS が遅れてるって普段どんな高尚な言語使ってんだよ 今時のコンパイラは固定回数のループは勝手に書き換えるしな 少しでもコーディングを楽にしようって 富豪的プログラミングに移りつつある中で 時代錯誤もいいとこだよ
>>1 に
・対象環境や使用技術は質問者の裁量であることを理解する者
ってあるだろ。あとは質問者が選べば。言い合いの煽り合いなんて
意味ないもん。主張があれば言えばいいだけで。
>>348 JavaScriptの処理系がそれをやってないことくらい分かれよ馬鹿。
少なくとも今の件では、場合分けをループ内で行う理由が無いのだから
ループを切り分けるのは自然な思考だと思うが。
だから
>>336 の保守性が低いとは思えん。
削れるところで削っておいて損はない。
俺はループのネストが読みやすいとは思わないな。
>>350 じゃあどんな言語が高レベルなんですか。
インタープリタ言語で何が高レベルなんですか馬鹿。
webプログラミングだって事、理解してんのかねぇ… あきらかに、常識外れの想定して、"遅い"だの"効率が悪い"だの言ってるけど、 常識内の想定なら、コード量減らして、通信容量の心配した方が良いんじゃねーの?としか思えんがな…
>>353 コード量が増えてるか?
俺はわざわざ条件処理の回数を厳密に書いてやったが、文字数も数えてやった方が良いのか?
355 :
347 :2007/02/04(日) 22:59:19 ID:???
>>354 いい加減、発想が時代遅れだって理解しろよ。
数レス前にした質問を繰り返すけどさ、おまえさんの想定している画像の表示枚数は、1ページに何枚だ?
>>355 >>336 >//関係ないが、明らかに無駄が多い。
>//たとえば、"000" から "999" まで出力するとする。
画像?計時して分かりやすいように別の状況を想定しただけだが、何を言いたいんだ?
まあ、好きにしろ。あまり叩くと、読みやすい教の洗脳が深まるだけだから、やめといてやるよ。
あと、テキストファイルの転送速度がネックになるのは皆無だ。それこそ、時代錯誤だぞ。
ウェブページで最大のネックは、描画速度だ。
結局、好きに書け、
>>340 みたいな醜態を晒さない程度に、という結論になっても、それはそれで正しい。
が、ループを分ける、ていどでうろたえるなよ、とだけ繰り返しておこう。頭悪すぎるぞ(あ、また叩いて洗脳深めちゃうなw)
ウェブで最大のボトルネックは リッチコンテンツの転送速度でしょ
自分の主張が通らなかったとかいって未練たっぷりだねえ。 ご愁傷様。いちおう2ちゃんらしい煽りでした(w
ああこういう老害いるいる こういうひとは「勉強になります大将」とか言ってお茶濁しとけばいいんだよ
ID出ない板は無駄に疲れる
>>357 実用上全く問題にならない"無駄"を"正しいスクリプトで改善"する為に、直接、金の絡む、通信容量の心配なんて、大した問題では無い。
こう言う結論ですね。
はい煽り合いのレス無駄づかいおしまいね。どうせまた 再発するだろうけど。過去にも何回もやってる論争だしね。 過去にどういう風に終わったか見とくといいんじゃないですかね。
>>362 さすがに
>>340 みたいなのは問題になる。同じテストを非力なマシンでやれば数分かかるか、フリーズする。
fileMaxの値によるんでしょ。それで終わりでいいじゃん。
367 :
347 :2007/02/04(日) 23:20:18 ID:???
>>365 だからさぁ…、どういう想定してるわけ?
よーーーく、考えてみなよ。
たとえば、1ページで1000枚のサムネイルを表示するとしよう。
私なら、こう言う、"お前馬鹿だろ?"と。
だからfileMaxの値によるんでしょ。レスの無駄使いやめようよ。
>>363 Opera とか使ってみるといいよ。
html を解析して DOM を構成して
DOMContentLoaded でごそごそやった後に
後から画像が差し込まれる。
ミリ秒をちまちま削ったところで
画像一個で相殺される。
つうか、洗脳が深いな。客観的に見てみろ。 高性能なマシンが普及した。これは事実だ。 しかし、JavaScript も JScript も、後方互換のしがらみで、大きな進化はしてないよ。 JScript はいつまでたってもキャシュすべきところをそうしない。 JavaScriptで変数やプロパティの宣言順序を気にしなくてよくなったのはつい最近だ。 つまり、コード書く人間の助力が大いに必要なんだよ。 あと、読みやすいコードを書いているんじゃなくて、暗記できた短い構文をスラスラ反芻してるだけだろ。 勿論、そういう気楽さを否定するつもりもないし、可能な限り楽をすれば良いと思うが、 それを処理するエンジンがレガシーを引きずっているのだから、机上の空論でしかないんだぞ。
さあ
>>363 が顔を真っ赤にして言い返す文句を考えていまつ。
しばらくお待ちくださいなのでつ。
もうやめようってば…
自分の主張だけが客観的だと主張する主観。
ソフト書きで最大のコスト要因は人間の作業時間だという「常識」が 分かってないだけでしょ。
自演って気づいてないのが自分だけってのもすごいな
さてここで質問しよう。2つのプログラムAとBは客の注文を 同じように満たす。Bの方が20%ほど速い。Aの方が通読して 理解するのに20%ほど短い時間で済む。あなたならAとBの どっちを選びますか。20%の速さか20%の読みやすさか。
>>377 話そらすな。ループを分けることのどこが読みにくいんだ。関数 w と関数 u, v とに可読性の差は無いだろう。
1つの作業に1つのループの方が「洩れは」読みやすいと考えているね。
俺も
>>380 しかし、上位桁に "0" を詰める時、ループを分けるのはかなり普遍的なパターンだ。
逆に、この問題で、ループを分けてなかったら、今回のように指摘したくなる。
分かったよ、読みやすさの感覚が他人と違うせいでこういう 論争になってるわけなのね。それでおしまいでいいじゃん。
いっそループ使わなきゃいいんじゃね
>>382 そうなの?どの言語で?JSだったらこのスレでは
「String(10000+j).substring(1)」とかが一番多いし短くて
読みやすいとされてるでしょ。ループ周回数がひどく多い
(今回の場合はそれはない)場合以外は無問題。他の言語だったら
sprintf()とか使うよな普通。で、どの言語の話?
他人の主張も受け入れて折り合いをつけられるようにならないと 2ちゃんやっててつらいよ…
>「String(10000+j).substring(1)」とかが一番多いし短くて >読みやすいとされてるでしょ。 多い、短い、読みやすい、全て事実だが、実行速度があまりに遅すぎる。
>>388 だからそれを何回実行するかで取捨選択すればいいんでしょ。
10回とか100回でも絶対不可だと主張しやすか?本当に?
>>388 おまえのコンピューターは、4004でも積んでるのか?
つまりたとえ10回しか実行しなくても遅いと思うだけで 激しく嫌悪感がつのって受け入れられないと。それなら そういう人間なんだから自分で他の方法を使うのはしかた ないけど、それを他人に押しつけないでくれ。迷惑だから。
老害
計ってみたが 1552:521 でたった3倍しか違わなかった。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html><head><title>???</title> </head><body> <script type="text/javascript"> var a = new Array(100000); var t1 = new Date().getTime(); for(var i = 0; i < 100000; ++i) a[i] = String(1000000+i).substring(1); var t2 = new Date().getTime(); var i = 0; for( ; i < 10; ++i) a[i] = "0000" + i; for( ; i < 100; ++i) a[i] = "000" + i; for( ; i < 1000; ++i) a[i] = "00" + i; for( ; i < 10000; ++i) a[i] = "0" + i; for( ; i < 100000; ++i) a[i] = String(i); var t3 = new Date().getTime(); document.write((t2-t1) + ':' + (t3-t2) + '<br>'); </script> </body></html>
まあいいじゃないか、どんな方法でも そのときそのときによって使い分けるのが 賢いプログラミングというものだ
こんな論争で60レスも浪費しちゃったよ…
どんな環境でも比率として3倍
Mac mini G4-1.42GHz mem1GB -Firefox2 2170:1154 -Safari 26518:9526 Firefoxはたいしたものだ 2倍しか違わん Safariは糞だな まあこんだけ回せれば十分だろうが
>>399 Fx2 1047:547 (やる度に結果が違うが、だいたいこのくらい)
IE6 4219:4813 (IE、遅いっす。と言うか、IE、subStrの方が速いっす。)
Operaもやってみたっす。 Opera9.02 1360:4156 (やっぱり、subStrの方が速いっす。) Fx2ループ分割、爆速っす。
【 結論 】 開発で重要なのは老害の思い込みではなく、 想定環境に応じたテストケースの結果と、高速化の必要性を天秤にかける事
正直、スクリプト言語で、こんな方法の高速化をしなきゃならない状況になったら、 それは、根本的に設計がおかしいか、言語の選択を間違っているか、どちらかだと思う。
substr() に対して配列の処理のウェイトが大きいんじゃないか?
>>343 見たらゼロ埋めしたあと何もしてないんだな。
差を大きく見せるためだけの無意味なコードか。
>>404 根本的に進化してないって言ってるだろ。だから人力が重要だって……。
>>405 アホがおかしなこと言うなよ。いわば定数項を削除して、できるだけ純粋な差を知るためだろ。
>>405 substr() は仕様本文には無いと少し前にも言ったんだが。
つうか、
>>394 にsubstr() は無いだろ。常連どもが使うわけがないから。
また来たか
すんまそん、substringですね、何となく打ち間違えて そのまま動いてしまうので間違いに気がつかないという。
以後、放置で。
放置了解一人目 ノシ
それでループ回数が10回とかでもsubstring()拒否な訳?
そのうち「
>>395 を8192回読め」という書き込みが繰り返されそうで怖いな
>>407 いろいろ試してみたんだが、おまえOperaで計っただろ。
Operaは、sliceが異様に重いぞ。Fx2で計ってみろ。ついでにIEでも。
onload = function() { document.body.innerHTML = document.body.innerHTML.replace(/文字/gi, '<a href="hogehoge.html">文字<\/a>'); } これが上手く機能しないんですが、どこが駄目なんでしょうか?
問題なし <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=SHIFT_JIS"> <title>テスト</title> <script type="text/javascript"> <!-- onload = function() { document.body.innerHTML = document.body.innerHTML.replace(/文字/gi, '<a href="hogehoge.html">文字<\/a>'); } //--> </script> </head> <body> <p>文字文字君</p> </body> </html>
>>416 htmlとjavascriptのcharsetが合ってないともしかして駄目ですか?
ちなみに文字の部分は記号なんですけど。
>>417 >htmlとjavascriptのcharsetが合ってないともしかして駄目ですか?
なんだ?
htmlと外部jsファイルで文字コードが違うって事?
ならscriptタグにcharset指定追加しませり
最近は、Jsonを使いまくってAJAXなんですが… もうAJAJ(アジャジャ)って呼んでいいですか?
>>417 まず日本語なしでやって確認すれ。それで動作すればコード問題。
コード問題を回避するには日本語文字を直接入れる代わりに
\uHHHH形式で入れればいい。終了。
421 :
rinka :2007/02/05(月) 11:36:50 ID:b/GFT7m+
初めて、カキコミさせていただきます。 どうしても、javascriptエラーが消えず、途方にくれています。 ロールオーバーをしたいのですが、誰かがつくったソースのイメージを いれかえただけなのですが、動かなくなってしまいました。 初歩的なミスだと思うのですか、基本的なjavascriptがわからず、 クライアントにせめられ困っています。 どなたか、エラーを直していただけませんでしょうか? よろしくお願いいたします。
422 :
rinka :2007/02/05(月) 11:38:09 ID:b/GFT7m+
おかねはらえばやってくれるひとがいるとおもいます。
>>421 誰かが作ったソース…
作者に聞けば良いだろう。当然、ライセンス受けているんだろう?
動いてるじゃん
普通じゃん
>>421 allaboutのパクリ?なんにせよこれで金取っているとはw
PRサイトでAjaxをメインに使うのは御法度だぜw
こんにちは。 画像をクリックしたらそのクリックした座標をゲットする方法を教えてください。 画像の左上頂点を0,0とした座標です。 event.xでブラウザ全体での座標はゲットでき、 またimgをpositionアブソリュートで指定すれば、その位置との逆算から画像上の位置をゲットすることはできるんですが、 ページの構成上、positionアブソリュートは使いたくありません。 具体的にどんなことがやりたいのかというと、画像上に書かれているグラフの座標を取得してそれにより様々な結果を textarea に表示しようというわけです。
>>428 img要素のoffsetTopとかoffsetLeftを取得して差し引けば
いいんでないの。
>>428 <input type="image">
>>430 送信とかせずに、一つのページ上(JavaScriptおんりー)でもそれが使えるでしょうか?
鯖でないローカルにおいても動作しないとダメなので。
onClickからフォームをsubmit リターンフォールすにして
GET文字列取得できるのかな?
>>431 429の方法で。scrollXXXXもつかってくれ
>>429 >>432 なんなんだよこれは!!!!
あのさ、
ほぼ思い通りの動作です。
大変ありがとうございました。
とほほをみていたのでoffsetTopとかが載ってませんでした。
だからとほほなんか見るなとあれほど(ry
ごめんなさい。てへっ
436 :
Name_Not_Found :2007/02/06(火) 00:39:20 ID:+Hh0ICTQ
知識をお借りしたいのですが… -------------------- <script language="JavaScript">document.write("<!--");</script> あいうえお<br/> <script language="JavaScript">document.write("-->");</script> -------------------- とした時に、1行目で文法エラーとなってしまいます。 FireFoxのエラー情報によると、1行目の</script> の / の所を矢印がさしていますが、 例えば、 <script language="JavaScript">document.write("AAA!--");</script> などとするとエラー自体は起こらなくなるので原因は <!-- だと思うのですが、 ここはどのように記述すればエラーは起こらなくなるでしょうか? ちなみに、<!-- や < などとした場合、<!-- と表示されてしまい HTMLがコメントとならないので、駄目なようです。 すみませんがよろしくお願いします。
すみません、 <!-- や &lt; などとした場合、<!-- と表示されてしまい… です。
JavaScript上で<!--は//と等価扱いじゃないかな。 JavaScriptでHTMLコメントを出力してどうしたいのか意味判らんけど、文字分解してinnerHTML追加したら成功したモヨリ <div id="outputDiv"></div> <script type="text/javascript"> outputHTML="" ; <!-- document.getElementById("outputDiv").innerHTML = "<!-- てすと -->" ;//無視される document.getElementById("outputDiv").innerHTML = "test<" +"!" +"-" +"- てすと -" +"->test" ; 出力結果はsafariとfirefoxで共に「testtest」。ちゃんと「てすと」がコメントアウトされてるようだ
440 :
Name_Not_Found :2007/02/06(火) 03:46:35 ID:TIPxpEPB
環境は、WinMe、128M、IE5.5です。 フリーのJavaScriptの使えるエディタはないでしょうか。 Aptanaというのは使ってみたのですが、 起動まで30秒ぐらいかかったり、終了するとエラーが出たり、 自分の環境には合いませんでした。
441 :
Name_Not_Found :2007/02/06(火) 03:49:30 ID:TIPxpEPB
使えるというのは、ソースの色分けができる、 文法チェックができるなどです。
×:"<!--" ○:'<!--'
444 :
Name_Not_Found :2007/02/06(火) 12:14:06 ID:/4F8iVui
うまくボタンにイベントを割り振ることができません。 ※allBtn.setAttributes = ("onClick", "myFunc()");としても ※allBtn.onClick = "myFunc()";としてもうまくいきませんでした。 Objectの把握の仕方が甘いためと思いますが,よろしくお願いします。 var allBtn = document.createElement("input"); allBtn.type = "button"; allBtn.id = "myBtn"; ※allBtn.setAttributes = ("onClick", "myFunc()"); allBtn.value = "my button" document.body.appendChild(myBtn);
445 :
Name_Not_Found :2007/02/06(火) 12:18:43 ID:/4F8iVui
(本質的な部分ではないですが) document.body.appendChild(myBtn)は document.body.appendChild(allBtn)の書き間違えです
>>444 過去レス見てみるといくらでも解決策が
それにしても、なんでFunction使ったり文字列使ったりすんのかなぁ
>>444 過去レスもそうだがまずFAQ読んどけよな。
448 :
Name_Not_Found :2007/02/06(火) 17:09:59 ID:WlZWDyXE
formItem=["あああ","いいい","ううう"] nameItem=["aaa","bbb","ccc"] document.myForm.aaa.value=formItem[0]; こうすると<input name="aaa" type="text" value="">に値が入るのですが、 document.myForm.nameItem[0].value=formItem[0]; こうすると入りません。配列にフォームにあるname名を指定して documentの対象としたいのですが、上のような書き方では無理なのでしょうか?
>>448 日本語がおかしくて理解できないね。HTML側も提示してみ。
>>448 > document.myForm.nameItem[0].value=formItem[0];
document.myForm[nameItem[0]].value=formItem[0];
451 :
448 :2007/02/06(火) 17:20:33 ID:???
>>450 まさにこれです!うまく行きました。ありがとうございました。
んー? あー、nameItem配列1番目の名前に一致したフォーム名を取得したいって事じゃね だとしたら答えは簡単だ FAQ9番嫁
あらぼーっとしてたら答え出てやんの まあいいや
ニヤニヤ
ひとり、恐ろしく読解力の無いのがいるなw
firefox2で obj.rows[n].cells[m].style.borderBottom = "1px solid #333333"; としても下線が引けないのですがどなたか助言いただけないでしょうか。 MSIE6は無論、Netscape7.1でも問題ないのですが...orz # style.color = "#333333" などであればfirefoxでもおkです。
458 :
Name_Not_Found :2007/02/06(火) 18:07:22 ID:7qxdZ6UF
459 :
Name_Not_Found :2007/02/06(火) 18:09:48 ID:7qxdZ6UF
<HTML><HEAD> <script type="text/javascript"><!-- function setStyle() { var divObj = document.getElementById("test2"); divObj.style.backgroundColor = "red"; divObj.style.width = 100; divObj.style.height = 100; } function get(){ //var ctrl = document.getElementById("test"); document.getElementById("test2").innerHTML = doGetCaretPosition(ctrl); } function set(pos){ var ctrl = document.getElementById('test'); setCaretPosition(ctrl, pos); } function doGetCaretPosition(ctrl){ var CaretPos = 0; if (document.selection) {// IE Support ctrl.focus (); var Sel = document.selection.createRange (); Sel.moveStart ('character', -ctrl.value.length); CaretPos = Sel.text.length; } else if {// Firefox support (ctrl.selectionStart || ctrl.selectionStart == '0'); CaretPos = ctrl.selectionStart; } return (CaretPos); }
460 :
つづき :2007/02/06(火) 18:13:38 ID:7qxdZ6UF
function setCaretPosition(ctrl, pos){ if(ctrl.setSelectionRange){ ctrl.focus(); ctrl.setSelectionRange(pos,pos); }else if (ctrl.createTextRange) { var range = ctrl.createTextRange(); range.collapse(true); range.moveEnd('character', pos); range.moveStart('character', pos); range.select(); } } // --></script> </HEAD><body> <textarea id="test"></textarea> <a href="javascript:setStyle()">11111</a> <div id="test2"></div> </body></HTML>
461 :
436 :2007/02/07(水) 01:26:41 ID:???
遅くなってすみません。
>>439 さん
ありがとうございます、参考にしてinnerHTMLを編集する方法で解決しました。
助かりました!
>>442 さん、443さん
元のソースでは、そのどちらの方法でも解決しなかったです…。
が、レスありがとうございました。
462 :
456 :2007/02/07(水) 09:12:15 ID:???
すいません、どうもCSSとのバッティングみたいです(お恥ずかしいことにノーマークでした)。
>>457 入れてはいるんですがアイコンが怖くてw
463 :
456 :2007/02/07(水) 09:35:33 ID:???
どうも border-collapse: collapse; が原因ぽいです。 一応報告。
>>463 スレ違いだがborderをcollapseしたら確かに危うそう。
tdなりの内側に別のdivを入れてそのdivのborderを設定すれば。
ニュースサイトに時々ある、
「続きを読む」をクリックすると、
別ページに移行せずに、下に続きの文章が現れるようにしたいです。
折りたたみメニューのスクリプトで表示は無事にされるのですが、
クリックしてすべての文章が表示されたときに、
「続きを読む」が「文章を閉じる」に変わるようにしたいのです。
ブログ用では、以下のスクリプトがあるようですが、
ttp://blog.livedoor.jp/jigokuhen00/archives/4465481.html これを普通のHTMLサイト用に直すことがどうしてもできません。
どなたかアドバイスいただけないでしょうか。
やりたいのは、以下のようなことです。
最初
--------------
・最初に表示される文章<BR>
続きを読む / 日付・引用元など(最初も最後も同じ文)
「続きを読む」クリックで以下
-----------
・最初に表示される文章
・クリックで表示された文章
文章を閉じる / 日付・引用元など(最初も最後も同じ文)
>>465 続きのページがどっか違う所にあってそこからひっぱってくるのか、
すでにHTMLソースに書いてあるのかで話が変わってくると思う
と言うか、まずどこまで自分で作ったのかを書いた方が良いよ
やり方一つじゃないと思うし
div.style.display = (element.style.display != "none")?"none":"block" とかかな
>>465 ああ、俺よくやる
みっつの要素の表示/非表示を切り替えていくだけでできるっしょ
A・「続きを読む」
B・表示/非表示を切り替えられる文章(最初非表示)
C・「閉じる」(最初非表示)
それぞれDIVタグに格納されてるとして、
・Aが押されたらAを隠してB,Cを表示
・Cが押されたらCを隠してA,Bを表示
要素.style.display="none"←→"block"あたりで切り替える
サンプルコードは
>>467 氏が部分例出してるし不要かな
もっといいやりかたあんのかな
469 :
456 :2007/02/07(水) 13:59:15 ID:???
>>464 Geckoに対して
border-collapse: separate;
border-spacing: 0px;
としました。
すっかりスレ違いだけどいつか誰かの役に立てれば幸い。
# ってか、これfxのバグだよね...?
CSSな話だが、border-collapseが「何をcollapse」するのか調べてみ。
471 :
456 :2007/02/07(水) 14:34:40 ID:???
>>470 助言ありがトン。
> 「何をcollapse」するのか
隣接するセルのボーダーですよね?
下線を引きたかったのはobj.rows[obj.rows.length - 1]のcellsなんで、
問題ないかと思っていたのですが...。
>>471 ソースを見んことにははっきりとわからんが
十中八九Fxのバグではないと思う。
重なったボーダーの優先度とか調べてみ。
それでも疑問があったらCSSスレへどうぞ。
グーグルマップがやってるようなマウスホイールの取得を実装したいのですが、検討つきませぬ。 なんぞ「ここ嫁」「これでぐぐれ」みたいなポインタあったら教えてください
thx ヘボシツモンスマソ
476 :
474 :2007/02/07(水) 15:45:55 ID:???
はえーよバカ。何十回リロードしてるんだ。
え、いやたまたまですよ 7回くらいですけん
applyを使った継承で質問があります。 var x = function() { /* なんらかのxの実装 */ }; var y = function() { x.apply(this); /* なんらかのyの実装 */ }; var z = new y(); このような形の継承関係があった場合に、 「xの実装のなかでyからは見ることが出来るけれど、zからみることが出来ない」 というメンバを定義することって不可能でしょうか?
479 :
Name_Not_Found :2007/02/07(水) 23:04:24 ID:4IIoDn4g
IEでキャレット位置を取得するのはやっぱり無理ですか?
480 :
Name_Not_Found :2007/02/07(水) 23:36:47 ID:NajzvM24
いろいろ調べてみたのですが行き詰ったので、解決の糸口となる
キーワードだけでもご教示頂けたらと思います。
現在は
function foo(id){
window.open("
http://xxx.jps?user_id= " + id, "new_win");
}
という関数があり、これをbuttonのonclickで呼び出しているのですが
仕様変更でpostで送信しなければならなくなりました。
HTMLの部分にformを追加してsubmitする方法ならpostで送信できますが
この関数はjsp内にincludeして広範囲で利用しているため、HTML部分の
修正を含めると工数が掛かるので、なんとか現状の引数を渡す仕様で
javascriptの修正だけでpost送信できないかと試行錯誤しています。
利用するクライアントはIE6限定になっています。何卒ご教示のほど
お願い致します。
>>478 それは昔俺も悩んだが、完璧な方法は思い当たらなかった。
ちなみにprototypeをつかった継承にしても同じ問題がある。
>>480 べつにHTML側を直さなくてもJSでdocumentの最後にでも見えない
iframeを挿入してその中にformを作ってpostすればいいんでは。
googleのキャッシュを表示したときのように 特定のキーワードの色を変えて表示させたいんですが ぐぐるためのヒント教えてください
>>483 「キーワード」 「ハイライト」
あと、DOMと正規表現つかえないときついだろうね
>>484 ありがとうございます
ずっと「キーワード」「マークアップ」で検索して難儀していました
重ね重ねありがとうございます
>>484 様の事は決して忘れません
>>482 そういうようなやり方しかないですかね。もっとスマートにできないかと
思ったのですが。しかし参考になりました。ありがとうございます。
>>486 ん? いったいどうスマートにやりたいんだ?
丁度いま、DOMでformとinput要素applendChildしてsubmit()呼んでる処理書いてるけど、普通にPOSTで飛ばせてるよ。
innerHTMLでもいけると思うけど。
>>478 var x = function() {
this.a = "A";
};
x.b = "B";
var y = function() {
x.apply(this);
this.bDash = x.b;
};
var z = new y();
z.a : "A"
z.b : undefined
z.bDash : "B"
こんなんで良いの?
>>486 XMLHttpRequest 使えば?
>>488 それだと仮にx.bがfunctionだった場合、x.bからxのスコープが見えないから一般的には駄目
>>488 レスありがとうございます。
しかしその場合、たとえば
var x = function() { var str = "test"; };
x.setStr = function(v) { str = v; }; // error
という問題があったり、
var x = function() { this.a = "A"; };
x.setA = function(v) { this.a = v; }; // 想定外
という問題があり、関数が絡んで同じクラスのメンバを使おうとすると困ってしまいます。
>>491 えーと、良くわかんないんだけど、xの一部分だけ継承したい?と言う要求?
493 :
Name_Not_Found :2007/02/08(木) 01:48:34 ID:kaj/iayM
IEでキャレット位置を取得する方法を聞いても、みんなが見事にスルーする理由はなんですか?
>>493 タイミングの問題。
テキスト入力欄での話ならcreateTextRangeでググれ。
javaソースとか探して張りつけてるだけのエセjava使いなんですけど 1からちゃんと勉強したいと思い参考サイトを見ようと思ってるのですが どこかわかりやすくてお勧めのところはないでしょうか? テンプレにあるもの意外をお願いします。 ちなみに貧乏なのであまりお金の掛かるものはなしでお願いします
とほほ
オライリーのサイ本。 図書館で借りれ。
>>493 とりあえず作ってみたけどー。IE専なんであんまりやる気出ず。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
<script type="text/javascript">
function test() {
var r0 = document.selection.createRange(), l0 = r0.text.length;
while(true) {
r0.moveStart('character', -1); var l1 = r0.text.length;
if(l0 == l1) break; else l0 = l1;
}
alert(l0);
}
</script>
</head><body>
<div><textarea id="a0" rows="10" cols="20" onmouseup="test()"></textarea></div>
</body></html>
>>500 参考書を求めたいという話題だったら元質問がネタだろうと
それと関係なくここを見てるヤシもいるんだからマジレス
するよ。過去何十スレもずっとそうしてるしね。アンタのが
このスレを分かってないだけだろ、よそ逝ってくれ。
もしかしてとほほの信奉者だったりして(だったら劇藁だな)。
おお、2ちゃんらしくなってきたねー。
(;^ω^)
おお、2ちゃんらしくなってきたねー。(笑)
>>487 目からウロコが落ちました。
本当にありがとうございました。
>>
>>478 とそれにレスしてる全員
過去にも言ったが、それを継承とは言わないから。
例えば、
>>478 で、z instanceof x は false だわな。継承してない。
継承の中で使われることが多いが、それ自体は継承ではない。
つまり、「apply を使った継承」 という言葉自体が意味不明だ。
いちいち、this.a = a; this.b = b; this.c = c; ... と書くのが面倒かつ変更時に弱いから、
(利用したい関数).apply(this, arrayLike) と書くだけだ。
>>507 継承ってのは、単にオブジェクト指向の概念の一つで、 instanceof の結果とは関係ないから。
>>507 > 過去にも言ったが、それを継承とは言わないから
(笑)
俺様口調でトンチキな事言う程恥ずかしい事は(ry
instanceofって、何の話をしているのやら ECMA262-3rd以外の話をしたいならオナニースレ行けよ
話逸れるけどECMA-262thirdのLanguage Specification pdfに しっかりinstanceof入ってますよこの半可通
半可通
半可通のお笑い種発言に半可通が突っ込むという体たらく まあ典型的な2chの日常風景 殺気立つ必要はあるまいて マターリ殺伐しようぜ
518 :
Name_Not_Found :2007/02/08(木) 16:52:50 ID:X2VYdmsf
極希なんですが、子windowから親windowにsubmitしようとすると 新しいwindowが立ち上がってしまいます。本当にたまにしか起こらないので 再現もできないし原因も分かりません。環境はWIN2KにIE6です。 考えられる原因があれば些細な事でも構わないのでヒントをください。
519 :
Name_Not_Found :2007/02/08(木) 17:49:17 ID:h5cgyBZ9
ページが読み込まれたら下のフレーム(bottomFrame)に
URLを表示させたいと思います。
<script type="text/javascript">
var url="
http://2ch.net ";
function bottom_url(){
location=url;
}
</script>
これだと開いているページ内が移動されますが、
フレームのページに移動されません。
ターゲット指定するにはどのように変えればいいのでしょうか?
JavaScriptのみで完全にユニークなIDって作成できるんでしょうか。 今まではnew Date().getTime()を利用していたのですが、 コンフリクトを起こしてしまいました… サーバサイドに手を入れることなく、ユニークなIDをつくりたいのですが、 ちょっとやり方が思い浮かびません。どなたかアイデアあれば是非ください
parent top あたりをググれ
>>520 何と何を一意に区別するIDなのかわからんが、
鯖側からなんらかの情報をもらわなければ本当にユニークな方法はない。
cookieにsessionidでも入ってればそれとDate方式の複合でなんとか。
コンフリクトを減らすだけならランダムな文字なりつける。
523 :
Name_Not_Found :2007/02/08(木) 19:07:18 ID:Y8HJ/jgW
>>520 Uniq_Id_1 とかで、カウントアップすれば?まぁ、オーバーフローすれば、被るけど。
>>520 無理だろ、常識的に考えて
まあ、getTime+それ以外の情報(UA、ページロードタイム、ウィンドウサイズ、ウィンドウ座標、マウス座標、ランダムな大きい数値とか)を元にIDを生成すればコンフリクトは確率的には少なくなるだろうね
要はIDを長くするor変化させるという一時しのぎ。やっぱり、CGIが使えないときつい
526 :
523 :2007/02/08(木) 19:12:35 ID:Y8HJ/jgW
<script type="text/javascript"><!-- function replace_css(textObj){ var sValue = textObj.value; var iNewSelectionStart = textObj.selectionStart; var iNewSelectionEnd = textObj.selectionEnd; if(typeof iNewSelectionStart != "number"){ var rngObj_S = document.selection.createRange();//選択範囲Object(textRange) var rngObj_A = textObj.createTextRange();//textarea内Object(textRange) var rngObj_B = textObj.createTextRange();//同上 var iMaxIndex = rngObj_A.text.length;//textarea内文字数 var Left = rngObj_S.offsetLeft;//選択領域の左側の位置 var Top = rngObj_S.offsetTop;//選択領域の上側の位置 rngObj_B.moveToPoint(Left,Top);//座標移動(x:横座標,y:縦座標) rngObj_A.setEndPoint("StartToStart", rngObj_B);// var iIndex = iMaxIndex - rngObj_A.text.length; //最後尾の改行計算バグ補正 if(iIndex == iMaxIndex){ var rngObj_T = textObj.createTextRange(); rngObj_T.collapse(true); rngObj_T.setEndPoint("EndToStart", rngObj_A); var iCount = 0; while(rngObj_T.expand("character")) iCount++; iIndex += ((sValue.length - iIndex) - iCount*2); } iNewSelectionStart = iIndex; iNewSelectionEnd = iNewSelectionStart + rngObj_S.text.length; } document.getElementById('a').innerHTML = iNewSelectionStart; document.getElementById('b').innerHTML = iNewSelectionEnd; } // --></script>
>>523 あんたの言う「キャレットの位置」って何なの?
先頭から何文字目にキャレットがあるかわかればいいの?
それとも何行目の何桁目という形で取得したいの?
はたまた上端から何ピクセル、左端から何ピクセルかが知りたいの?
528 :
Name_Not_Found :2007/02/08(木) 22:45:48 ID:kaj/iayM
>>527 「先頭から何文字目にキャレットがあるか」でお願いします。
レスくれてありがとう。
結局
>>501 は無視ですかそうですか。まあいいんだけど。
質問させてください。 RegExpで「直前にaが無いb」にマッチさせるにはどうすればいいんでしょうか? 例えば"abcbb"の最初のbはスルーして2番目と3番目のbにだけマッチさせたいんですが。 否定後読みってのを使えばよさそうってとこまでわかったんですがうまくいきません。
>>529 まあいいなら書くなよ
うぜーな、この構ってチャンが
>>530 スレ違い。だから答えはずばり教えてあげないけど、[^a]をうまく使って書け
>>532 それは駄目じゃないの。"abcbb".replace(/[^a]b/g, "B") → abcBb
しまった間違えた、でも駄目なのに変わりはないような。 "abcbb".replace(/([^a])b/g, "$1B")
JavaScriptでもJScriptでも戻り読み「(?<=...)」はサポートされてないからな。 工夫して切り抜けるしかないんじゃね? "abcbb".replace(/b/g, function(match, index, input){ return input.charAt(index-1) == 'a' ? match : 'B'; });
おっと、この場合は「否定戻り読み『(?<!...)』はサポートされてないからな」というべきだったか。
537 :
Name_Not_Found :2007/02/09(金) 10:35:01 ID:9PFIRdfj
>>4 のQ9に似ているのですが…
document.forms["myform"]elements[hogeghoge]
の「hogehoge」の部分に 配列を格納した変数「hoge[x]」を入れたいのですが
うまくいきません
[`hoge[x]`]とクウォートで囲んだり [hoge][x]としてみましたが どうしても
エラーになります
何か良い方法はありますでしょうか? ご教授いただけるとうれしいです
["hoge[0]"] ["hoge[1]"] var x = 0; ["hoge[" + x + "]"]
>>537 document.forms['myform'].elements[hoge[x]].value
とかだよね。elementsの前の「.」が抜けてるぞボケ!!!!
(このスレでは「ご教示」でないと煽られるので注意)
541 :
537 :2007/02/09(金) 10:51:17 ID:???
>>538 ありがとうございます 僕の理解力が悪いのか
document.forms["myform"].elements["hoge"+x+"]"]
ではエラーが出ました
>>539 二つもボケをかましてしまいすいませんでした
「ご教示」ですね 気をつけます!
>>540 おっしゃるとおりですね…
リファレンスをじっくり読んできます!
皆さんありがとうございました!
> elements["hoge"+x+"]"] すごい頻度でミスるな。コピペもできなきゃ手の施しようがない。 つうか、["hoge[x]"] なんだろうな、たぶん。HTML見せれば即決するが、アホらしゅうて誰も回答しないかw
543 :
543 :2007/02/09(金) 14:33:13 ID:S700YF3q
フレームを使って左にメニュー(menu)、右に本文(view)を表示させてます
メニューのフレームで
<span onClick='top.view.window.location.replace("
http://www.yahoo.co.jp/ ");return false;'>別サイト</span><br>
<span onClick='top.view.window.location.replace("test.html");return false;'>同じサイト</span><br>
と記述して「別サイト」をクリックしたら本文の方にヤフーを表示
「同じサイト」をクリックしたら本文の方に自サイトのhtmlを表示させたいです
「同じサイト」クリック後「別サイト」クリックはきちんとヤフーが出ます
「別サイト」クリック後「同じサイト」クリックだとtest.htmlに遷移しません
<a>タグ等では普通にヤフーに遷移することが出来ます
なお、IEでは上記の様になりましたがネスケでは正常に動作します
過去ログは「location.replace 別サイト」で検索しましたが特に良さそうな例は見つかりませんでした
ご教授お願いします
top.frames['view'].location.reprace〜 若しくは top.view.location.replace〜 「window」は最上位オブジェクトですよ。
>>543 へーIEってそうなんだ。「.window」だけ削除したら動くとか?
546 :
543 :2007/02/09(金) 17:09:30 ID:O8ViFILf
あ、なるほど。了解しました。助かりました〜
>>545 とりあえずスッキリしたソースが好きなので下でキチンと動きました
547 :
530 :2007/02/09(金) 18:35:29 ID:???
ありがとうございました。 否定戻り読みはサポートしてなかったんですね。
548 :
Name_Not_Found :2007/02/09(金) 23:24:29 ID:x0BV8VZb
質問です。 HTMLにタグを貼るとき <script src="AAAA.js" type="text/javascript"></script> <script src="BBBB.js" type="text/javascript"></script> <script src="CCCC.js" type="text/javascript"></script> ↑を↓みたいにできませんか? <script src="AAAA.js" type="text/javascript"></script> (BBBB.js と CCCC.js は AAAA.jsから読み込む) javascriptからjsファイルを読み込む方法が分かりません
549 :
Name_Not_Found :2007/02/09(金) 23:25:57 ID:d1B/kzU0
質問です。 Select要素の中の要素をすべて削除して、 新しい要素を追加したいのですが、 for(i = 0; i < selO.length; i++){ child = selO.child(i); selO.removeChild(child); } だと、全部消えてくれません。 知りたいのは、 すべての子を一気に消す方法はないか。 ないなら、どういう方法が一般的か。 なぜ、上のコードで、すべて消すことができないのか。 の3点です。 宜しくお願いします。
>>548 document.write('<script src="BBBB.js" type="text/javascript"></script>')
document.write('<script src="CCCC.js" type="text/javascript"></script>')
>>549 後ろから消しなよ
あと個人的にあまり好きじゃないんだが
piyo.length = 0 で全部消える
です
554 :
Name_Not_Found :2007/02/09(金) 23:33:55 ID:d1B/kzU0
>>551 あぁ、0から消すと、1にあったのが0にズレるんだ?
先入れ後出しでつね。
ありがとうございます。
>>549 <script type="text/javascript">
function kaeru(){
var selO = document.getElementById("selO");
var cloneSelO = selO.cloneNode(false);
cloneSelO.appendChild(document.createElement("OPTION"));
cloneSelO.lastChild.text = "変更した";
cloneSelO.appendChild(document.createElement("OPTION"));
cloneSelO.lastChild.text = "変更した";
selO.parentNode.replaceChild(cloneSelO, selO);
}
</script>
<select id="selO"><option>変更前</option><option>変更前</option><option>変更前</option></select>
<input type="button" value="替える" onclick="kaeru()">
556 :
Name_Not_Found :2007/02/09(金) 23:42:32 ID:d1B/kzU0
>>555 selectコピって、新しく中身作って
select置き換えるのか。
これはいいですね。
さらによく見てみると、selectの属性とか変更される可能性ないんで
置き換えだけでよさそうです。
ありがとうございます。
>>557 <SCRIPT Language="JavaScript">
<!--
idlist = new Array('dh1','dh2');
function show_hide(id) {
for(n=0; n<idlist.length; n++) {
if(id==idlist[n]) {
disp = document.all(id).style.display;
if(disp == "block")
document.all(id).style.display = "none";
else
document.all(id).style.display = "block";
} else {
disp = document.all(idlist[n]).style.display;
if(disp == "block")
document.all(id).style.display = "none";
}
}
//-->
</SCRIPT>
これくらいしか思い付かない。
>>558 disp = document.all(idlist[n]).style.display;
if(disp == "block")
document.all(idlist[n]).style.display = "none";
}
}
//-->
少し訂正。
560 :
Name_Not_Found :2007/02/10(土) 05:54:48 ID:Idxi/UCG
キャレット位置は取得できないでFAですか?
いつも中入れ中出しでつ。
563 :
Name_Not_Found :2007/02/10(土) 08:33:09 ID:6HBejGjf
>>563 いや… IE6しか持ってないんで、手元のIE6では動いている
んだけど何か動かないとこがあるのなら知りたいなと。
テキストボックスじゃなくて、「普通の文章を選択状態にする」方法あります? 一応調べて無理っぽいとは思ったんですが、もし知っている方がいれば。
画面全体をreadonlyのtextareaにするとか
>>565 これもIE6でしかテストしてないけど。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
<script type="text/javascript">
function test() {
var r0 = document.body.createTextRange();
r0.findText('鉛筆'); r0.select();
}
</script>
</head><body onload="test()">
<p>これは鉛筆です。</p>
</body></html>
>>567 Geckoのコードも追加した。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
<script type="text/javascript">
function test() {
if(document.body.createTextRange) { // IE
var r0 = document.body.createTextRange();
r0.findText('鉛筆'); r0.select();
} else if(document.createRange) { // Gecko
var r0 = document.createRange();
var t0 = document.getElementById('p0').childNodes[0];
r0.setStart(t0, 3); r0.setEnd(t0, 5);
window.getSelection().addRange(r0);
}
}
</script>
</head><body onload="test()">
<p id="p0">これは鉛筆です。</p>
</body></html>
569 :
566 :2007/02/10(土) 12:18:31 ID:???
570 :
Name_Not_Found :2007/02/10(土) 14:28:21 ID:0I7GbTgF
「/」がエスケープされた「%2F」がさらに「%252F」とエスケープされている場合、 これを「/」に戻すにはどうすればいいんでしょうか・・・ replace((\/|%2F|%252F), unescape("$1")) とすると「%2F」は「/」になるんですが 「%252F」は「%2F」になるだけで「/」にはなってくれません・・・ プログラミングに関しては何も知らないんですが やりたいことがあって(ほかの人が作った物を自分好みにしたい) 正規表現だとかunescapeだとかを知ったばかりなんですが・・・ よろしくおねがいします
え?こう? unescape(unescape("%252F"))
572 :
570 :2007/02/10(土) 14:44:24 ID:0I7GbTgF
>>571 それで普通はいけるものなんでしょうか?
やってみたんですが「%252F」から「%2F」になったままです・・・
もしかしたらほかの部分に問題があるのかもしれません
調べてきます
ありがとうございました
>>572 いや、その正規表現と合わせて使っても駄目だよ?
alert( unescape(unescape("%252F")) );
これ自体はちゃんと / が表示されるでしょ?
変換させたい文字列をそのまま突っ込んで下さい。
例
var url = "
http:%252F%252Fwww.2ch.net%252F ";
var url2 = unescape(unescape(url));
alert(url2);
574 :
570 :2007/02/10(土) 16:19:58 ID:???
ああ、レスが。どうもです このままじゃダメで別のかたちに書き換えないといけないんですね 勉強してきます・・・
575 :
Name_Not_Found :2007/02/10(土) 16:29:16 ID:qildVD6B
>>568 "鉛筆".length == 2 のように2文字以上の場合は Text ノードオブジェクトが複数になっている場合が普通にあるから、W3C-DOM の方は、そう単純にはならないだろう。
normalizeすればいいと思うけど
>>577 複数の Text に分割されている場合、最も多い(というか100%と言ってよい)のは、
「<span>あいう</span>えお」 から、「うえ」を探すような場合。
579 :
565 :2007/02/10(土) 18:33:24 ID:???
>>567 でFAでした。どうもありがとうございます。
>>570 var nanika = '%252F';
while(nanika.match(/%[\d\w]{2}/){
nanika = unescape(nanika);
}
でどーかと思ったんだが、escape の仕様をよくわかってないんで
まずいやも
つーか元の文字列に '%' が入ってたらどうするんだろうね?
わかる人の突っ込みキボンヌ
ごめん、ちょぉまずかった
582 :
Name_Not_Found :2007/02/10(土) 22:10:29 ID:7Popa41S
>>582 標準がXHTMLだと考えるのは構わないけど、拡張子なんて無難にしておけば良いともう。
どうせIE + application/xhtml+xmlがらみでしょ。 サーバが返すMIMEタイプを変えられない環境なら.htmlでいいじゃん。 間違いじゃないし。
どっかで単にXHTMLに反することやってる気ガス firebugあたり使ったら挙動がおかしくなってる点でエラー読めたりしないかい。
586 :
Name_Not_Found :2007/02/10(土) 22:38:58 ID:7Popa41S
>>584 いちおう、Mac OS X Tiger+Safari&Firfoxで、開発してるんです。
拡張子は、やっぱりHTMLの方が良いですかね?
588 :
Name_Not_Found :2007/02/10(土) 23:15:29 ID:7Popa41S
>>587 へいっ!
<script src="scripts/prototype.js" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
function loadDataFile(fName)
{
new Ajax.Request(fName, { method: 'get', onComplete: displayData });
}
function displayData(httpObj)
{
$("outputarea").innerHTML = httpObj.responseText;
}
//]]>
</script>
こんな感じっす。<div id="outputarea"></div>の間に出力するということです。
あんたはアメリカ人か
590 :
Name_Not_Found :2007/02/10(土) 23:19:27 ID:7Popa41S
591 :
565 :2007/02/10(土) 23:23:07 ID:???
>>565 >>567 >>579 の続きなんですが、
「鉛筆」が文章中に複数ある場合、必ず1個目のほうが
選択状態になりますよね?
2個目以降は選択できないんでしょうか。
調べたら、findTextのオプションの引数で指定できるようなのですが、
findText('鉛筆',1)でも
findText('鉛筆',2)でも両方1個目が選択されます。
環境はXPのIE6です。
>>591 findTextの第2引数の意味が分かってんのかね。referenceを読め。
とりあえず込み入った方法で選択したいのならtextareaの内容を
まず調べてどの位置を選択するか決め、moveで位置決めして
moveEndで範囲の後ろを調整し最後にselectするとかかな。
まあがんばって。referenceのありかはテンプレにあるだろ。
593 :
Name_Not_Found :2007/02/11(日) 02:02:15 ID:V978gkxf
prototype.jsを始めてみようと思い、
http://www.prototypejs.org/よりダウンロードしたものを 使っているのですが、
簡単なソースファイルを書き、FireFox + FireBugsを使って様子を見てみると、
次のようなエラーがでて、うまく動きません。
>>illegal character (prototype.js line 1)
一方、IE6で試してみたところ、とくに問題なく動きました。
私は、prototype.js自体に問題があると考えているのですが、
ソースファイルを見てみたところ、特に問題があるとは思えません。
どなたか原因・解決法をご存知の方がいらっしゃれば、教えてください。
594 :
565 :2007/02/11(日) 03:00:50 ID:???
>>592 第二引数は検索の方向ですか・・orz
英語のリファレンス見てたので早とちりしてしまいました。
何とかやってみます。
>>593 もし文字エンコードの相違が原因であれば、HTMLのSCRIPT要素のCHARSET属性を明記すれば解決する。
596 :
Name_Not_Found :2007/02/11(日) 05:09:10 ID:HwFCKy8g
>>560 createRangeを使えば簡単だと思ってるやバカが多いみたいだけどIEじゃ結構面倒。
面倒だから教えないけど。
597 :
Name_Not_Found :2007/02/11(日) 09:54:14 ID:5jaI0ZdV
質問【オンマウスでリンク画像(文字)が跳ねるようにしたい】 ↓これでは駄目だった <HEAD> <link rel="stylesheet" href="style.css" type="text/css"> <SCRIPT LANGUAGE="JScript" type="text/jscript" charset="shift_jis" src="jmplink.js"> </SCRIPT> </HEAD> <BODY onLoad="jmplink();"> <a href="" target=_blank onfocus="this.blur()"></a>
>>596 それで
>>501 は自分とこでは動作するんだけど他の人のとこ
ではだめなのでしょうか…
>>597 そのJSの中身を公開せずに質問に答えられるESPなんかいない。
帰れ。
>>595 さん
解決しました。ありがとうございました。
ツリー形式のメニューを作りたいのでツリー型のオブジェクトを作り、 再帰呼び出しで表示しようとしたのですが、全部の項目が表示されません。 データはキチンと格納されているようなので、再帰呼び出し処理にバグが あると思いますが、余計な処理を削ぎ落として極力シンプルにしてエラーを 見つけやすくしても、どこにもおかしな所が見付けられませんでした。 <html><head><script language="javascript"> function MenuData(text,href) { this.text = text; this.href = href; this.children = new Array(); this.addChild = function(text,href) { length = this.children.length; this.children[length] = new MenuData(text,href); return this.children[length]; }; } Cmd = new Array(); Cmd[0] = new MenuData('項目0','menu0.htm'); Cmd[1] = new MenuData('項目1','menu1.htm'); Cmd[2] = Cmd[0].addChild('項目00','menu00.htm'); Cmd[3] = Cmd[0].addChild('項目01','menu01.htm'); Cmd[4] = Cmd[1].addChild('項目10','menu10.htm'); Cmd[5] = Cmd[1].addChild('項目11','menu11.htm'); Cmd[6] = Cmd[2].addChild('項目000','menu000.htm'); Cmd[7] = Cmd[2].addChild('項目001','menu001.htm'); Cmd[8] = Cmd[3].addChild('項目010','menu010.htm'); Cmd[9] = Cmd[3].addChild('項目011','menu011.htm');
Cmd[10] = Cmd[4].addChild('項目100','menu100.htm'); Cmd[11] = Cmd[4].addChild('項目101','menu101.htm'); Cmd[12] = Cmd[5].addChild('項目110','menu110.htm'); Cmd[13] = Cmd[5].addChild('項目111','menu111.htm'); Menu = new Array(Cmd[0],Cmd[1]); function List(Nodes, depth) { for(i=0;i<Nodes.length;i++) { buff = ""; for(j=0;j<depth;j++)buff = buff + '■'; buff = buff + Nodes[i].text + '<br>'; document.write(buff); if(Nodes[i].children.length > 0)List(Nodes[i].children, depth+1); } } </script> </head> <body> <span> (関数による再帰呼び出し表示)<br> <script language="javascript"> List(Menu, 0); </script> </span> <hr>
<span> (非再帰呼び出し表示)<br> <script language="javascript"> buff = ""; for(i=0;i<Menu.length;i++) { buff = buff + Menu[i].text + '<br>'; for(j=0;j<Menu[i].children.length;j++) { buff = buff + '□' + Menu[i].children[j].text + '<br>'; for(k=0;k<Menu[i].children[j].children.length;k++) { buff = buff + '□□' + Menu[i].children[j].children[k].text + '<br>'; } } } document.write(buff); </script> </span> </body> </html> どこかおかしな点が見付けられる人がいたら、知恵を借りたいと思います。 自分の頭ではこれが限界です。お願いします。
内容みてないけど 変数全部グローバルだね
グローバル化社会ですから。
>>603 関数の外で宣言しなくてもグローバル変数扱いになるんですね。
関数の中で宣言したら、ローカル変数になりました。
メニューもキチンと表示されます。
ありがとうございました。
606 :
Name_Not_Found :2007/02/11(日) 14:15:54 ID:7MPwvs99
質問です。 Div要素に、アルファチャンネル付きPNG画像を表示させているんですが フィルタを使用したくなって、適用してみると、アルファチャンネルが透けなくなってしまいました。。。 どちらも使うのは無理なのでしょうか?
607 :
Name_Not_Found :2007/02/11(日) 17:39:24 ID:hU8PO4pZ
恥ずかしい質問ですがご容赦を。 いつもDWで作業してますが、手打ちはソースを確認するくらいです。 そして今DWがなくて違う場所にいます。 そしてどうしても解決したい機能がありまして質問させていただきます。 1)ブログの過去記事が増えてきて、ジャンプメニューでさっとアクセスできるようにしたい。 2)「バックナンバー」というリンクを押したら別窓で小さなリスト一覧が出る。 3)そこで特定の記事を選ぶと、メインの窓でその記事が表示される。 その小さな窓の中でなら表示はすぐ出来るのですがメイン画面に表示させる術を知らないのです。 ターゲットとかbody IDなどは分かってきたのですが実際に組むとなると頓挫してしまいました。 head内に書くjavascript内になにか指定をしたりするのでしょうか? 手取り足取りお願いすることになっていますがどうかよろしくお願いいたします。
window.opener
>>607 window.opener.location.href = 行き先URL;
610 :
607 :2007/02/11(日) 20:59:06 ID:???
>>608-609 感謝です。
こういうのがあったとは…勉強不足でした。
そして勉強になりました。
ありがとうございました。
HPをアップロードした再に 検索中のページは、アクセス時に無効なメソッド (HTTP 動詞) が使われたため、表示できません。 と表示される箇所があったのですが 具体的にどのような不具合な箇所があるのでしょうか?
>>611 どこがJavaScriptと関係あると判断したんだね?
614 :
611 :2007/02/12(月) 10:45:56 ID:???
javascriptで作ったページだったのでこちらで 聞いてみました。 初心者スレで聞いてみます。
>>614 次に来る時は「エラーが出る最小限のソース」を作って貼るようにね。
それができないならここで質問しないでくれ。
var textareas = document.getElementsByTagName('textarea'); みたいにinput type の text だけ取得できる? ・・・、 の が()にみえて変な感じ。
もうちょっとわかりやすく質問してくれ
目的は <input type="text" value="" name="" /> っていうのだけを取得することなんだけど、 var hoge = document.getElementsByTagName('input'); しかできないのかな、 <input type="button" value="" name="" /> まで取得しちゃうのが悩ましくて。 if ( this.getAttribute("type") == "text") で試したけれども、数が多いと表示に時間がかかってしまう。うーん なんかもっとシンプルにしたい!というところで挫折中。
>>616 できません。どっちかというとtype="button"を使うかわりに
<button>...</button>を使えばいいんでないの?
>>619 ありがとう〜 無理だったか。
<button>、そのとおりなのだけど、
既存サイトなもので書き換えができないのよ〜。
getAttributeより早そうな他の手段を考えてみるわー
誰の目にもDOM-XPathの使い所じゃないか。 しかし、DOM-HTMLでtypeプロパティを条件にグレップしても全然遅くないけどな。
遅くないなら結構なことだな。
>>621 なるほど、Geckoで動くね。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
<script type="text/javascript">
function test() {
var r, x, a = [];
if(document.evaluate) {
r = document.evaluate('//input[@type="text"]', document, null, 0, null);
while(x = r.iterateNext()) { a.push(x); }
for(var i = 0; i < a.length; ++i) { a[i].value = 'X'; }
}
}
</script>
</head><body>
<form action="#" onsubmit="return false"><div>
<input name="b0" type="button" value="Test" onclick="test()">
<input name="t0" type="text">
<input name="b1" type="button" value="Test"><input name="t1" type="text">
<input name="b2" type="button" value="Test"><input name="t2" type="text">
</div></form></body></html>
>>623 そういう風に使うならXPathResultをスナップショット系にするようにすれば
whileで配列に入れなくてもよくなるよ
あとXPath式を相対パスにしてコンテキストノードをdocument.bodyに絞ってevaluateした方が速い
625 :
Name_Not_Found :2007/02/13(火) 00:35:24 ID:cdRia9UT
(相対パス) && (コンテキストノード) //
>>624 が指摘済み
&&
( <input> も <input type="text"> も、DOM-HTML の type プロパティが "text" )
==> 'descendant::*[(local-name()="INPUT" or local-name()="input") and (not(@type) or @type="text")]'
擬似的に画面内にウィンドウを表示するようなフレームワークが あったと思うんですが名前をど忘れしてしました 英語のサイトだったと思うんですが・・優しい人だれか教えてくだちい
628 :
620 :2007/02/13(火) 01:55:11 ID:???
629 :
627 :2007/02/13(火) 02:23:06 ID:???
>>628 ビンゴです!ありがとう!
今見たんですがlightboxは画像だけなんですね
LITBoxでエロいことしてみよう・・・
>>626 要素名が大文字かそうじゃないか(text/htmlかapplication/xhtml+xmlか)はXPath式の外で判定した方が
無駄がなくなるんじゃないかな
判定方法はルート要素が大文字かどうか調べるのでもdocument.xmlVersionの有無でも
Gecko拡張のdocument.contentTypeでも何でもいいけど
var n = document.documentElement.localName;
var input = (n != n.toUpperCase()) ? "input" : "INPUT";
var expr = 'descendant::*[local-name()="'+input+'"][not(@type) or @type="text"]';
〜
>>630 // [... and ...] を JS に訳す。
Array.filter(document.body.getElementsByTagName('*'),
function (e) {return e.localName == input && e.type == 'text';});// (!e.getAttribute('type') || e.getAttribute('type') == 'text')
// [...][...] を JS に訳す。
Array.filter(document.body.getElementsByTagName('*'),
function (e) {return e.localName == input;})
.filter(function (e) {return e.type == 'text';});// (!e.getAttribute('type') || e.getAttribute('type') == 'text')
* HTMLInputElement のリスト作成と保持、
* HTMLInputElement の個数分のループ増分、
のせいで、変数 input を作って省いた無駄が帳消しされる。
結局、微小な無駄を省くための無駄な努力を本気でやるなら、
IF (text/html) {
IF (HTML) descendant::INPUT[...];
ELSE IF (html) descendant::input[...];
} ELSE {
descendant::*[... and ...];
}
のような分岐を JS で書くことになるかな。
632 :
630 :2007/02/13(火) 08:04:41 ID:???
>>631 すごい勉強になった。ありがとう
これだけちゃんと知ってる人が居るんなら自分ももっと質問しようかな
633 :
Name_Not_Found :
2007/02/13(火) 17:40:09 ID:PNob3ppY JSで、rubyのString#scan()に相当するものはありますか。 input = "....."; while (m = input.scan(/(¥w+)=(¥d+|¥w+.¥w+)/)) { ... } のようなかんじで、つづけてマッチングさせたいんです。