こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

思ったように動作しません

試行錯誤してここまで来たのですが力尽きました・・・
memo="target"になっている要素を表示非表示するボタンを
隠す要素の上に表示するスクリプトなのですが、なかなか思うようにいきません。


<body>
<div memo="target">TARGET1</div>
<div memo="target">TARGET2</div>
<div memo="target">TARGET3</div>
<script type="text/javascript">
var AllTag = document.getElementsByTagName("*");

function sw(t){
sd = t.nextSibling.nextSibling.style;
if(sd.display == "none"){sd.display ="";}
else {sd.display ="none";}
}

function make(){
var link = document.createElement('a');
link.setAttribute("href","#");
link.setAttribute("onclick","sw(this)");
link.setAttribute("style","display:block;");
link.appendChild(document.createTextNode("表示・非表示"));


for(i=0;i<AllTag.length;i++){
if(AllTag[i].getAttribute("memo")=="target"){
//link = link.cloneNode(true);
AllTag[i].parentNode.insertBefore(link,AllTag[i].previousSibling);
alert(AllTag[i].innerText);
}
}
}

make();
</script>
</body>


メモ:
1.var AllTag = document.getElementsByTagName("*");をdivに変えて
//link = link.cloneNode(true);を有効にすると大分いい感じに動作するのですが、
対象がdivに限定されていないので*を使いたい。

2.*でlink = link.cloneNode(true);有効にするとダイアログボックスが無限に開くのでご注意

3.IEだと表示非表示ボタンの位置と、消える場所がうまくいかない

こんな感じなのですが、よろしくお願いします・・・

投稿日時 - 2009-08-25 19:11:39

QNo.5236118

困ってます

質問者が選んだベストアンサー

ちょっと、classでのしていは、まずいかぁ~。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<title>test</title>

<div class="abc tgt">TARGET1</div>
<div class="tgt def">TARGET2</div>
<div class="ghi tgt jkl">TARGET3</div>

<script type="text/javascript">
var reg = new RegExp('\\b' + 'tgt' + '\\b');

function make () {
 var doc = document;
 var tmp = doc.getElementsByTagName("*");
 var cnt, obj, tgt =[];
 var p = doc.createElement('p');
 var a = doc.createElement('a');

 a.href = '#';
 a.style.display = 'block';
 a.name = 'tgt';
 a.appendChild(doc.createTextNode("表示・非表示"));
 p.appendChild(a);

 for(cnt = 0; obj = tmp[cnt++]; ) reg.test(obj.className) && tgt.push(obj);
 for(cnt = 0; obj = tgt[cnt++]; ) obj.parentNode.insertBefore(p.cloneNode( true ), obj);
}

//@cc_on
document./*@if (@_jscript)attachEvent('on'+ @else@*/addEventListener(/*@end@*/
 'click', function (evt) {
  var e = evt./*@if (@_jscript) srcElement @else@*/ target /*@end@*/;
  if ('A' === e.nodeName && 'tgt' === e.name)
   with(e.parentNode.nextSibling.style) display = display == 'none' ? 'block': 'none';
 }, false);

make();

</script>

これとは、まったくちがうことなのだけど。
教えてgooで、みると、「このカテゴリで人気のQ&A」のいちらんに
「1つのformで複数のactionを実行できますか?」が、とっぷで
くいこんでくるのはなぜ?とおもうのは、ばぶぅ~だけ?
ということを、かいとうするたびに、つけてみようとおもう。^^;

投稿日時 - 2009-08-26 08:55:46

補足

Oh、自己解決してからみてしまいました、私はID自動で振付ける方法で。
できれば使いたくなかったんだけど・・・

Siblingの挙動がIEと他で違うかったんですねぃ。
IEが.nextSiblingの所を他は.nextSibling.nextSiblingっていう風にニ連続にしないといけないみたいです。.previousSiblingも同じくです。

そしてそして、回答ありがとうございました~!

投稿日時 - 2009-08-26 10:13:42

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

えぇ~と。
AllTag[]は、いきものだじょ。ついかするとふえるから、ずれるじょ。

var tmp = link.cloneNode(true);
みたいにしないと、linkがふえつづけるじょ!

ついかする<a>たぐようそは、いんらいんようそだから、ぶろっくようそで
かこまないとだめだじょ!

HTML5なら、いいのかもしれないけど(くわしくはふめい)
<div memo="target">みたいにかってにmemoなんて
つかっちゃだめかもよ?

投稿日時 - 2009-08-25 21:13:43

あなたにオススメの質問