のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,646,703人
昨日:no data人
今日:
最近の注目
人気の最安値情報

私的良スレ書庫

不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

元スレ+ JavaScript の質問用スレッド vol.76 +

JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニュー
スレッド評価: スレッド評価について
みんなの評価 :
タグ : - 計算機プログラミング + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
レスフィルター : (試験中)
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
651 : Name_Not - 2010/02/27(土) 08:50:56 ID:??? (-5,-29,-32)
>>650
まず、document.write()し終わった後の想定されるHTMLを
書いてみる。それが正しいHTMLになってなければそもそも
うまく動くわけがないでしょ。HTMLのバージョンはどれを想定?
652 : Name_Not - 2010/02/27(土) 08:56:33 ID:??? (-7,-30,-150)
> なにが間違っているのでしょうか?

"Oh, year!" ではなくて "Oh, yeah!" ではなかろうか。

という冗談はさておき、


<html>
<head>
<title>window or document</title>
<script type="text/javascript">
window.str = "window";
document.str = "document";
</script>
</head>
<body>
<form>
<input type="button" value="押してみて" onclick="alert(str)">
</form>
<script type="text/javascript">
alert(str);
</script>
</body>
</html>


onclick で呼び出されている write() って実は document.write() の方でしょ。
独自定義の方を _write() とかにしたら意図通りに動くと思うよ。
655 : Name_Not - 2010/02/27(土) 10:05:12 ID:??? (+17,-29,-85)
document.write でページ内容が既に書き換わっちゃっていて、
そのページに更新かけてるから。

location.href とかで google のトップページに飛ばした後で
いくらリロードしても google のトップページがリロードされるだけ。
みたいな。
656 : 650 - 2010/02/27(土) 10:28:21 ID:??? (+12,-17,-14)
>>655

なるほど、ありがとうございます。
document.writeは使い道が難しそうですな。。。
657 : Name_Not - 2010/02/27(土) 10:30:58 ID:??? (+2,-30,-56)
"Sun Nov 29 01:20:14 +0000 2009"
のような形式の日付文字列を、Dateオブジェクトに変換したいのですが、
どうすればできますか?
よろしくお願いします。
658 : Name_Not - 2010/02/27(土) 11:07:30 ID:??? (+3,-30,-23)
>>655
document.openのほうじゃないか?

>>657
new Date("Sun Nov 29 01:20:14 +0000 2009")
659 : Name_Not - 2010/02/27(土) 11:19:29 ID:??? (+5,-29,-16)
>>658
その方法だと、Firefoxは大丈夫なんですが、IEがエラーになります。。。
661 : Name_Not - 2010/02/27(土) 11:42:34 ID:??? (+67,+30,+0)
662 : Name_Not - 2010/02/27(土) 11:54:45 ID:??? (+49,-30,-279)
[環境]
IE 8
FF 3.6


document.body.innerHTML = document.body.innerHTML
.replace(/aaaa/gi,'bbbb')
.replace(/cccc/gi,'dddd')
.replace(/eeee/gi,'ffff')
 …(省略) …
.replace(/hoge/gi,'geho');


上記のようにreplaceをどんどん繋げていってreplaceを約1300個繋げたいです。
IEでは問題なかったのですが、
Firefoxでは1000個目前後で、
「too much recursion」というエラーが出て置換できませんでした。
このFirefoxでのエラーを回避できる方法はありますでしょうか?

ただし、以下のように
document.body.innerHTML = document.body.innerHTML.replace(/aaaa/gi,'bbbb') … ({replaceを500個くらいで分ける}) … replace(/hoge/gi,'geho');
document.body.innerHTML = document.body.innerHTML.replace(/aaaa/gi,'bbbb') … ({replaceを500個くらいで分ける}) … replace(/hoge/gi,'geho');
2回に分ける方法でいけるといえばいけたのですが、パフォーマンスが落ちるのであまりやりたくないのです。

よろしくお願いします。
663 : Name_Not - 2010/02/27(土) 11:56:52 ID:??? (-2,-30,-23)
>.659
ECMA標準はDate.parse(str)だった
それでもダメならパーザ書くしか
664 : Name_Not - 2010/02/27(土) 12:02:59 ID:??? (+17,-30,-197)
>>662
var pattern = [['a', 'b'], ['c', 'd']];
var html = document.body.innerHTML;
for (var i = 0, l = pattern.length; i < l; i++) {
html = result.replace(pattern[i][0], pattern[i][1]);
}
document.body.innerHTML = html;

>2回に分ける方法
innerHTMLへの代入はパースが起きる最後だけしろ変数使え
665 : Name_Not - 2010/02/27(土) 12:23:53 ID:??? (+5,-30,-44)
>>662
var a = [[/aaaa/gi, 'bbbb'], [/cccc/gi, 'dddd'], ...];
var s = document.body.innerHTML;
for(var p in a) s = s.replace(p[0], p[1]);
document.body.innterHTML = s;
666 : Name_Not - 2010/02/27(土) 12:45:58 ID:??? (-6,-29,-4)
また配列にfor-inかよ
667 : Name_Not - 2010/02/27(土) 12:58:20 ID:??? (+50,+18,+2)
>>661
ありがとうございます。
668 : Name_Not - 2010/02/27(土) 13:03:06 ID:??? (+63,+28,-44)
>>662
innerHTML弄るときにDOM構造を崩さないように気をつけろよ
669 : Name_Not - 2010/02/27(土) 13:40:15 ID:??? (+13,-30,+0)
>>659
日付書式変えてみるといけると思うよ。↓をいじっていろいろ試してみて。

<html>
<head><title>string to date</title></head>
<body>
<table><tbody id="result"><tr><th>str</th><th>new Date(str).toString()</th></tr></tbody></table>
<script>
var dateStr = [
"Sun Nov 29 2009 01:20:14 GMT+0000",
"Nov 29 2009 01:20:14 +0000", // 曜日とかGMTとかはいらない
"2009 01:20:14 29 +0000 Nov", // 区別がつけば順番ばらばらでも意外といける
"2009/11/29 01:20:14 +00:00", // IE8はタイムゾーンに : が入るとだめ
"2009-11-29 01:20:14 +0000",
"09/11/29 01:20:14 +0000", // IE8不可 他では1929年9月11日に
"2009/11/29", // IE8不可
"01:20:14" // Opera可
], resultSRC = "", resultTable = document.getElementById("result");
function newTR(str){
var tr = document.createElement("tr"); resultTable.appendChild(tr);
var td = document.createElement("td"); tr.appendChild(td); td.innerHTML = str;
td = document.createElement("td"); tr.appendChild(td); td.innerHTML = new Date(str).toString();
}
for (var i = 0; i < dateStr.length; i++) newTR(dateStr[i]);
</script>
</body>
</html>
670 : 669 - 2010/02/27(土) 13:47:26 ID:??? (-2,-30,-23)
訂正。"09/11/29 01:20:14 +0000"(1929年になるやつ)はIE8でもいけた。
"+00:00"で試したときのメモが残ってたごめん。
671 : Name_Not - 2010/02/27(土) 18:18:22 ID:??? (-1,-29,-15)
replace() メソッドの第二引数の function 指定、
皆、利用してないんだな。
672 : Name_Not - 2010/02/27(土) 18:29:17 ID:??? (+57,+29,-9)
こんなの合ったのか。>第二引数がfunction
関数使わないとできないってのにお目にかかったことが無いから使ったことなかったな。
673 : Name_Not - 2010/02/27(土) 18:41:14 ID:??? (-1,-29,-57)
jQueryのイベントハンドラ登録で、
bind()使って登録するのと、click()とかmousemove()で直接結びつけるのってどう違うの?
674 : Name_Not - 2010/02/27(土) 18:49:51 ID:??? (-1,-29,-35)
bindでclickを登録するのとclickを使うのは同じです
675 : Name_Not - 2010/02/27(土) 18:57:37 ID:??? (+13,-30,+0)
iPhoneのときはjavascriptでcssを切り替えるようにしようと思ったのですが、表示が変わりません。
FirefoxのDOM Inspectorで見るとrelの値は変わっているのですが、この変更では切り替えられないのでしょうか?

<head>
<link href="/src/common.css" rel="stylesheet" title="common" />
<link href="/src/iPhone.css" rel="alternate stylesheet" title="iPhone" />
<script type="text/javascript">
var link = document.getElementsByTagName('link');
for(var i=0;link[i];i++)
{
if(link[i].getAttribute('title'))
{
switch(link[i].getAttribute('rel'))
{
case ('stylesheet'):
link[i].setAttribute('rel','alternate stylesheet');
break;
case ('alternate stylesheet'):
link[i].setAttribute('rel','stylesheet');
break;
}
}
}
</script>
</head>
676 : Name_Not - 2010/02/27(土) 19:02:18 ID:??? (-1,-29,-6)
idつけてhrefの値を切り替えてみたら?その方がスマートな気がする。
677 : Name_Not - 2010/02/27(土) 19:22:04 ID:??? (-1,-29,-6)
Attribute関係はブラウザを選ぶんじゃなかった?
678 : Name_Not - 2010/02/27(土) 19:30:51 ID:??? (-1,-29,-14)
PC用のをメインにしてappendChildでiPhone用のCSSで上書きするようにしたら?
679 : Name_Not - 2010/02/27(土) 19:47:11 ID:??? (+9,-24,-21)
後からlink要素をいじってもCSSの再読み込みはされなかったような。
680 : Name_Not - 2010/02/27(土) 19:52:09 ID:??? (+52,+29,-3)
不確かな情報は書き込まなくていいよ
681 : Name_Not - 2010/02/27(土) 19:54:59 ID:??? (+4,-30,-108)
>>679
x = document.createElement("link");
x.href = "data:text/css;utf-8,body{background-color:#000;}";
x.rel ="stylesheet";
document.getElementsByTagName("head")[0].appendChild(x);

やってみな
682 : 675 - 2010/02/27(土) 20:43:49 ID:??? (+22,-5,+0)
諦めてhref属性変えることにします
ありがとう
683 : Name_Not - 2010/02/27(土) 21:20:53 ID:??? (+57,+29,-20)
と思ったら場合によっては何も表示されなくなってしまう…
やっぱり諦めて@mediaで上書きすることにします
684 : Name_Not - 2010/02/27(土) 23:49:25 ID:??? (+3,-29,-62)
bookmarkletを作ろうと思い調べたところJavaScriptを使っている事がわかったのですがURLにあらかじめ
決まった単語を追加するにはどうすればいいですか?
lang_ja ←をURLの最後に追加するbookmarkletが作りたいんです。
685 : Name_Not - 2010/02/28(日) 00:01:03 ID:??? (+9,-29,-62)
ページをロードせずにアドレスバーの値を書き換えることは無理。
「lang_ja」を URL の最後に追加した文字列が欲しいだけなら prompt で出せば?
IE の場合は、大抵、設定によって prompt はブロックされるけど。
686 : Name_Not - 2010/02/28(日) 00:06:17 ID:??? (+57,+29,-8)
これはリンク要素に付けたいんじゃないかな・・?どちらにしろ意味がよく分からないが
687 : Name_Not - 2010/02/28(日) 00:08:44 ID:??? (+8,-30,-117)
>>685
レスありがとう。
文字列が欲しいだけじゃなくて今表示しているページのURLにlang_jaを追加した後自動でリロードしてくれるものが作りたいです。
MacのSafariを使ってます。
JavaScriptに関してまったく知識が無いので1,2行で済むなら書いていただけると嬉しいのですが。
javascript:location.href=○○○lr=lang_ja; って感じで手探りで作ってみたんですけど無理っす。
688 : Name_Not - 2010/02/28(日) 00:15:16 ID:??? (+43,-30,-54)
javascript:location.href=(location.href+'lang_ja');
javascriptの知識無いとブックマークレットは作るの大変だよ。
win IEでは動いた。

document.とかってどこまで省略していのかわからん。
689 : Name_Not - 2010/02/28(日) 00:53:27 ID:??? (+0,-29,-88)
>>688
location オブジェクトは window のプロパティ。
window はローカル変数と名前が衝突していなければ常に省略できる。
document は基本的に省略できない。

>>650 の件は多分、スコープチェーンの先頭に document が追加されているだけ。
with が使われているのと同じ。タグにハンドラ書くことないから、知らなかったけど。
690 : Name_Not - 2010/02/28(日) 00:56:19 ID:??? (+0,-30,-22)
>>687
javascript:location.href+="付けたい文字列";

でおk?
691 : Name_Not - 2010/02/28(日) 01:01:05 ID:??? (-14,-30,-59)
window.window.window.window.window.window.window.window.window.window.window.window.alert("window!!");
windowオブジェクトの中にwindowプロパティが循環参照になってるからこんなことも出来る
692 : Name_Not - 2010/02/28(日) 01:02:14 ID:??? (+63,+29,-54)
>>688-690
わざわざ書いて頂いてありがとうございます。
文字列を追加できました。
やっぱり何も知らないと無理ですね。
初心者向けのサイト観て来ます。
親切にありがとうございました。
693 : Name_Not - 2010/02/28(日) 01:02:49 ID:??? (+12,-11,+0)
>>691
吹いたw
694 : Name_Not - 2010/02/28(日) 06:29:54 ID:??? (+57,+29,-28)
HTMLタグに書いたイベントハンドラの実行コンテキストの件は新鮮だったな。
こんな振舞いをするとは。俺も知らなかった。
695 : Name_Not - 2010/02/28(日) 06:36:10 ID:??? (-22,-16,-36)
はっきり言えばJS1.0からあってHTML5にも明記されている
IEはもっと複雑なルールがあるからMSDNでも見ろ
697 : Name_Not - 2010/02/28(日) 17:04:04 ID:??? (+77,+29,-2)
>>696
それって意味あるの?
698 : Name_Not - 2010/02/28(日) 17:50:01 ID:??? (+67,+29,+0)
>>697
ぜんぜんちがう
699 : Name_Not - 2010/02/28(日) 18:07:26 ID:??? (-1,-29,-8)
JavaScriptで、マルチスレッドで処理を行うにはどうすればいいですか?
700 : Name_Not - 2010/02/28(日) 18:09:29 ID:??? (-1,-29,-5)
JavaScript マルチスレッド

でググる
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : - 計算機プログラミング + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

類似してるかもしれないスレッド


トップメニューへ / →のくす牧場書庫について