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

このエントリーをはてなブックマークに追加
831Name_Not_Found:04/07/26 21:46 ID:???
>>830
まずはDOM CSSでルールの中からimport探してそのhrefを参照
とかいう普通のことをやってみては?
832Name_Not_Found:04/07/26 22:02 ID:???
>>830
IEだと普通のDOM2CSSは使えないので
document.styleSheets[n].imports[m] を参照することになる。
833Name_Not_Found:04/07/26 22:20 ID:rjoz5eIR
>>831-832
おおありがとうございます。mozillaでCSSImportRuleさがすという方法で
なんとかできました。
しかしIEの方が楽そうですね。
834Name_Not_Found:04/07/26 23:05 ID:???
クマクマ
835Name_Not_Found:04/07/27 11:26 ID:???
width = p2.getX() - p1.getX();
height = p1.getY() - p2.getY();

String style, textstyle;

if ( scale <= 15000) {
style = "fill:#FF0000;fill-opacity:0.15;stroke:#FF0000;stroke-width:0.8";
textstyle = "fill:#FF0000;font-size:80;fill-opacity:0.4";
} else {
style = "fill:#0000FF;fill-opacity:0.15;stroke:#0000FF;stroke-width:0.8";
textstyle = "fill:#0000FF;font-size:80;fill-opacity:0.4";
}

fill-opacity:0.4とは、何を示す言葉なんですか?
836Name_Not_Found:04/07/27 12:14 ID:???
ぐぐれ。
837835:04/07/27 13:43 ID:???
>>836
ぐぐりましたが、説明と思われるところはありませんでしたので教えてください。
838Name_Not_Found:04/07/27 13:54 ID:???
ソレSVG関係だよね。opacity=透明度。つまり半透明な色で塗りつぶす
とこどで、その透明度を指定している。
839Name_Not_Found:04/07/27 13:58 ID:???
840Name_Not_Found:04/07/27 15:06 ID:???
てか>>835の冒頭4行ぐらいが禿しくJavaScirptじゃなさげなんだが。
841835:04/07/27 15:15 ID:???
>>838-840
ありがとうございました。
>>840
お察しのとおり、これは元々JAVAのプログラムの一部ですが、JAVAスレでスクリプトだと言われてこちらに来ました。
842Name_Not_Found:04/07/27 15:20 ID:???
>>841
その言われたところに次のを貼っといて。
「バカヤローJavaとJavaScriptの区別もつかんくせに知ったかな
誘導するんじゃねーよ!! (JavaScriptスレ住人一同)」
843Name_Not_Found:04/07/27 18:02 ID:???
Javascriptを利用して、HTML中にある「<!--コメント-->」
という文字列の、「コメント」という部分だけを抽出して表示するようなことは可能でしょうか?
844Name_Not_Found:04/07/27 18:49 ID:???
>>843 こういう感じ?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
<script type="text/javascript">
function test() {
var a = document.body.innerHTML.replace(/\n/g, '').split(/<!--/);
a.shift();
for(var i in a) a[i] = a[i].replace(/-->.*$/, '');
alert(a.join('|'));
}
</script>
</head><body>
<div><!-- コメント -->普通のテキスト</div>
<div><!-- コメント -->普通のテキスト</div>
<div><!-- コメント -->普通のテキスト</div>
<p><a href="javascript: test()">test</a></p>
</body></html>
845Name_Not_Found:04/07/27 19:14 ID:???
>>843
CommentNodeからnodeValueを取得するのが一応の正攻法。
846Name_Not_Found:04/07/27 20:38 ID:???
JavaScriptってhtmlに埋め込むのと、外部ファイルに作るのってどっちがいいの?
847Name_Not_Found:04/07/27 20:40 ID:???
>>846
用途次第だろう。
848Name_Not_Found:04/07/27 22:12 ID:???
>>845 なるほど。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
<script type="text/javascript">
function extract(n, a) {
if(n.nodeType == 8) a.push(n.nodeValue);
for(var i = 0; i < n.childNodes.length; ++i) extract(n.childNodes[i], a);
}
function test() { var a = new Array; extract(document, a); alert(a.join('|')); }
</script>
</head><body>
<div><!-- コメント -->普通のテキスト</div>
<div><!-- コメント -->普通のテキスト</div>
<div><!-- コメント -->普通のテキスト</div>
<p><a href="javascript: test()">test</a></p>
</body></html>
849Name_Not_Found:04/07/27 22:17 ID:???
イベントハンドラは--<script type="text/javascript"><!--
//></script>--を記載しなくても良いんだよね?
850Name_Not_Found:04/07/27 22:22 ID:???
>>849
HTML中に書くハンドラでは書きようがないだろ。
<body onload="...">
JavaScript中でハンドラを設定する場合…
window.onload = funciton() { ... };
やっぱり書きようがないだろ。どういう場合のことを言ってる?
そもそも自分はJavaScriptソースをコメントで囲むことはとっくに
やめてる。対応しないクライアントは捨ててる。(JavaScriptが動作
しないのはそれはそれでいいけど。)
851Name_Not_Found:04/07/27 23:25 ID:???
>>850
window.document.onkeydownとか…関数の宣言と一緒に実行してしまう時には
囲むかも知れんね。<body>タグだと、範囲指定が上手くいかないときとか。
いやまあ、基本的にないわな。
852Name_Not_Found:04/07/27 23:57 ID:???
>>851
理解できん。「宣言と一緒に実行」の例を書いてみせてよ。
853Name_Not_Found:04/07/28 05:01 ID:???
質問です。ある要素の、CSS で指定された属性(色、装飾など)を
JavaScript から読み出すことはできないでしょうか?

やりたいことは、リンクを複数並べて、最後にクリックしたものだけが他の
リンクと色が違うようにしたいのです。

どなたか、お願いいたします。
854Name_Not_Found:04/07/28 07:34 ID:???
>>853
<a href="#" style="color:red" onclick="alert(this.style.color)">リンク</a>
みたいなこと聞いてる?
855Name_Not_Found:04/07/28 08:10 ID:???
>>854
この現スレで2回も「その方法ではCSS側で指定した色は読み出せない」
という話が出ていて読み出す方法も説明されているんだが。おまけに
質問者の意図からしたら役に立たないよな。
>>853
CSSで指定したものを読み出すのは面倒なわりに「最後にクリックした
もの」とほとんど関係ないだろ。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
<style type="text/css">
a, a:visited, a:active { color:brown }
</style>
<script type="text/javascript">
var last = null;
function chg(e) {
if(last != null) last.style.color = 'brown';
last = e; e.style.color = 'green';
}
</script>
</head><body>
<p><a href="http://www.yahoo.com" target="t" onclick="chg(this)">yahoo<a></p>
<p><a href="http://www.google.com" target="t" onclick="chg(this)">google<a></p>
<p><a href="http://www.goo.ne.jp" target="t" onclick="chg(this)">goo<a></p>
</body></html>

856Name_Not_Found:04/07/28 08:19 ID:???
>>855
「ある要素の、CSS で指定された属性」ってだけじゃ
style要素による指定かstyle属性による指定か解らんから
メンド臭くない方を例示して聞いただけだが。
857Name_Not_Found:04/07/28 10:57 ID:???
java scriptを外部から読み出したいんだけど、この際、複数の命令を1つの外部ファイルに
まとめてもいいの?
858Name_Not_Found:04/07/28 11:25 ID:???
意味わからん
859Name_Not_Found:04/07/28 11:26 ID:???
>>857
命令ってのは関数のことだと思うけど
いいよ。
860Name_Not_Found:04/07/28 12:21 ID:???
>>835
VBScript?
まぁ、どうでもいいけど。
861853:04/07/28 13:05 ID:???
>>854-856
ありがとうございます。要素の属性は、外部CSSファイルで指定されていて、
JavaScript とは無関係にデザイナーさんが変更する可能性があるのです。

その読み取り方は、このスレですでに紹介されていたのですね。失礼しました。
>>396 http://www.oreillynet.com/pub/a/javascript/excerpt/JSDHTMLCkbk_chap5/index5.html
が、まさに望んでいたものでした。ありがとうございました。
862857:04/07/28 14:48 ID:???
ありがとうございます。
ちなみに、外部ファイルはひとつのHTMLに何個まで読み込めるんですか?
863Name_Not_Found:04/07/28 15:05 ID:???
>>862
制限なんかないけどね。あまり多くすると遅くなるだろうけど100個
とかならまあ問題ないよ。
864857:04/07/28 15:14 ID:???
そうなんですか、先ほど外部ファイルを2つほど作成し、1つのHTMLファイルで
2つ.jsファイルを読み込ませようとしたところ、どうしてもどちらか1つしか読み込んでくれず、
現在も悪戦苦闘しております。

865Name_Not_Found:04/07/28 15:22 ID:???
>>864
同じ関数名でもあるんじゃないかなと思ったりした
866857:04/07/28 15:27 ID:???
いま確認したところ特に同じものはありませんでした。
ちなみに、1つの外部ファイルに複数の処理を書いて試したんですが、一番最初に
書いた処理しか、実行してくれません。
867Name_Not_Found:04/07/28 15:38 ID:???
できることができないのはどこか間違ってるからだろ。
全部晒すか自分で間違いを探せ。
868857:04/07/28 15:43 ID:???
全部載せると大変になるので、問題があると思われる。複数の処理のつなぎ目を載せます。
for (i=1; i < n; i++){
y[i]=Math.round(Y[i]+=(y[i-1]-Y[i])*speed);
x[i]=Math.round(X[i]+=(x[i-1]-X[i])*speed);
}
ClockAndAssign();
setTimeout('Delay()',20);
}
if (ns||ie)window.onload=Delay;

/*-------別のスクリプト-------------*/
var TC = 0;
var Msg = "ようこそ!お料理のページへ";
var timer = 0;
function Mess() {
if (TC < 1000) {
TC++;
document.title = Msg;
Msg = Msg.substring(2,Msg.length) + Msg.substring(0,2);
var timeID=setTimeout("",1);
clearTimeout(timeID);
timeID=timer = setTimeout("Mess()",500);
}
else { document.title = " " }
}
869Name_Not_Found:04/07/28 15:57 ID:???
>>868
そんな断片じゃ何とも言えないだろ。まず前半は「{」と「}」の
数が合わないしClockAndAssign()もDelay()も関数定義がないし。
後半はなぜ空文字列でsetTimeout()呼ぶのか分からんし即clearTimeout()
してるのもわからんしtimeIDがローカル変数なのもわけわからんし、
要はアンタがプログラミング下手すぎて失敗してるとしか思われん。

下のようなサンプルで「2つとも読み込めていること」「片方の中から
他方で定義した関数を呼べていること」が確認できるが何か?
---main.html---
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
</head><body>
<script type="text/javascript" src="t1.js"></script>
<script type="text/javascript" src="t2.js"></script>
</p><a href="javascript: test1()">test</a></p>
</body></html>
---t1.js---
alert('t1.js reading.');
function test1() { alert('Test1'); test2(); }
---t2.js---
alert('t2.js reading.');
function test2() { alert('Test2'); }
870857:04/07/28 16:04 ID:???
個別では実行できています。
上のに関しては、if (ns||ie)window.onload=Delay;の後ろに”}”を付けると逆に実行されなくなります。
871Name_Not_Found:04/07/28 16:06 ID:???
>>870
どっかにアップロードしてURIを晒せ。しかしどっちかというと
あんなボロボロなコードを大量に見たくはないけどね。まあ別に
見ようと見まいとこっちの勝手で怖いもの見たさもあるけどね。
872857:04/07/28 16:08 ID:???
ちなみこのコードは私が書いたものではなく、サンプルをお借りして複数実行しようと
しただけです。
873853:04/07/28 16:09 ID:???
javascript:var a=""; for(var i in document.getElementsByTagName("a")[0].style){a+=i +"<br>";}; document.write(a);undefined;

javascript:alert(document.getElementsByTagName("A")[0].style.visitedcolor);



すみません、先ほどの者ですが、あるリンクにフォーカスがあっても
周囲に点線が出ないようにするのは、JavaScript ではどう指定したら
良いでしょうか?

CSS なら
a:aciteve {border-style:none}
あたりでうまく行きそうですが、JavaScriptで個別の要素に設定する方法が
分からないのです。

具体的には、一度クリックしたリンクは、他のリンクがクリックされるまで
点線が表示されないようにしたいのです。

よろしくお願いします。
874853:04/07/28 16:10 ID:???
すみません、>>873 の冒頭のコードは意味がありません。ただのゴミで、範囲
選択のミスによるものです。
875Name_Not_Found:04/07/28 16:17 ID:???
>>873
考え方としては、onfucus の時に blur() してあげる、という方向で。
要素に onfocus="this.blur();" と書いてもいいし、
DOM にアクセスしてオブジェクトを取得して、

obj.onfocus = function(){ this.blur(); }

とするのも可。
ただし、マウス無しではそのアンカーなりを叩けなくなる諸刃の剣。
初心者には以下略
876Name_Not_Found:04/07/28 16:25 ID:???
>>872
だったらなおさら、「食べ合わせ」が悪いかなんかだろ。
アップロードして動かない状況が再現してれば誰かが究明
してくれると思うけどね。それなしでグダグダ言っても
どうにもならんね。漏れは用事があるから出かける、さいなら。
877853:04/07/28 16:30 ID:???
>>875
ありがとうございます。実は、最後にクリックしたリンクだけを無効に
して、地の文と変わらなくしたいのです。これらのリンクは、フレームの
左メニューです。

obj.onfocus = function(){ this.blur(); }
としましたが、リンクをクリックした直後には、点線が消えてくれません。
一度別の場所に(TABキーなどで)フォーカスを移し、もう一度クリックすると
今度はちゃんと点線が非表示になるのですが。

obj.onfocus = function(){
this.blur();
document.getElementsByTagName("BODY")[0].focus();
}
などとしても同じでした。

これは IE6 でも Mozilla 1.7 (Sylera) でも同じでした。
クリックの直後も点線が表示されないようにできないでしょうか。
878Name_Not_Found:04/07/28 16:46 ID:6u3kfU39
<html>
<head>
<script type="text/javascript">
function test()
{
document.getElementById('check01').checked = true;
document.getElementById('check02').checked = false;
document.getElementById('flag').checked = true;
}
</script>
</head>
<body onLoad="test()">
<form name="test01">
<input type="checkbox" name="check01">check01<br>
<input type="checkbox" name="check02" checked>check02<br>
<input type="radio" name="flag" value="0" checked>0
<input type="radio" name="flag" value="1">1
</form>
</body>
</html>

このような時、フラグのvalue==1の方だけをchecked にする方法が良くわかりません。
実際はforでグリグリ回しながらgetElementById('check0'+i)のように状況に応じて一気に変更
したいとおもっています。
よろしくお願いします。
879Name_Not_Found:04/07/28 17:11 ID:???
ページ(1):ページ(2)へのリンクで、クッキーに画像のパスを保存
ページ(2):クッキーからパスを呼び出し、imgタグに埋め込んで画像表示
というようにしたいのですが、どのようにしたらよいでしょうか。
わからないなりに数日間色々してみて、クッキーの書き込みまでは上手くいったのですが
クッキ−読み込み→imgタグに埋め込んで表示 がサッパリできません。

●ページ(2)
<html><head>
<script language="javascript" src="../js/cookie.js"></script>
</head>
<body>
<script language="JavaScript">
document.writeln('<img src="img(画像用のフォルダ)/'+name+'" width="10" height="10" alt="'+name+'">');
</script>
</body></html>

●外部JavaScriptファイル(cookie.js)
name=loadCookie()
function loadCookie(){
tmp = document.cookie+";";
tmp1 = tmp.indexOf("cookie_name",0);
if(tmp1 != -1){
tmp = tmp.substring(tmp1,tmp.length);
start = tmp.indexOf("=",0);
end = tmp.indexOf(";",start);
return(unescape(tmp.substring(start+1,end)));
}
return("");
}

おそらくとんでもなく簡単なんだろうとは思うのですが…
初歩的で申し訳ありませんが、どうかよろしくお願いします。
880875
>>877
どうか。

<script type="text/javascript">
window.onload = function(){
var tmp = document.getElementsByTagName("a");
for(var i=0 ; i<tmp.length ; i++){
tmp[i].onfocus = function(){ this.blur(); }
}
}
</script>

<ul>
<li><a href="#">ふんにゃか ふんにゃか</a></li>
<li><a href="#">ふんにゃか ふんにゃか</a></li>
<li><a href="#">ふんにゃか ふんにゃか</a></li>
<li><a href="#">ふんにゃか ふんにゃか</a></li>
<li><a href="#">ふんにゃか ふんにゃか</a></li>
<li><a href="#">ふんにゃか ふんにゃか</a></li>
<li><a href="#">ふんにゃか ふんにゃか</a></li>
<li><a href="#">ふんにゃか ふんにゃか</a></li>
</ul>