- ベストアンサー
このような文は作れますか?
JavaScriptで、もしtheElement(これはdocument.createElementで作成した要素)自身、又はそのいくつか上の親ノードのクラスがtheClass(これも、theElement.setAttributeで指定した属性)なら、という文を作りたいのですが、出来ますか? よろしくお願いします
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
こんな感じでしょうか。 以前テストしたものをちょっと変更していますので余分なところが多いです。 この場合不一致は出ないですが比較する要素に不一致するものを選んでも最終的なkの値で判断できます。 参考程度に見てください。 <!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> </head> <script type="text/javascript"> <!-- function dd(){ //*****************この部分は文章作りの前書きです***************** tag = new Array("samp","small","strong","q");//挿入するタグ名 a=document.body.getElementsByTagName('*'); //取りあえず連番でクラス名をつける for(i=0;i<a.length;i++){ a[i].setAttribute('class',"a"+i); } //配列の内のタグをランダムにBIGの子供に挿入 tt = Math.floor(Math.random() * tag.length); theElement = document.createElement (tag[tt]); document.getElementsByTagName('BIG')[0].appendChild(theElement); //HTMLを書き出して挿入された要素の確認 document.getElementsByTagName('p')[0].firstChild.nodeValue = document.body.innerHTML; obj=document.body.getElementsByTagName('*'); //比較用のクラス名をランダムに選択 theClass="a"+tt; //比較用の要素をランダムに選択 R = Math.floor(Math.random() * 5); //動作確認用の表示 document.getElementsByTagName('h4')[0].firstChild.nodeValue = obj[R].tagName; document.getElementsByTagName('h4')[1].firstChild.nodeValue = theClass; //最初に挿入された要素と比較用要素が一致するかみる //*****************前書き終り********************************* //**************問題の文章はこの部分です。*********************** k=0; Parent = theElement; ParentC = Parent.getAttribute('class');//最初の段階ではnull while((theElement!=obj[R])&&(ParentC!=theClass)&&(Parent.tagName!="BODY")){ //挿入された要素の親要素とクラス名を取得 Parent = Parent.parentNode; ParentC = Parent.getAttribute('class'); k++ } //k=0なら挿入要素と一致その他は+1毎に上の階層の要素と一致それがbodyなら一致なし alert(k); } //--> </script> <body onload="dd()"> <div> <span> <tt> <big> </big> </tt> </span> </div> <p>a</p> 検索タグ名<h4>kt</h4> 検索クラス属性<h4>class</h4> </body> </html>