リンクに関する制御について【XHTML&CSS&JavaScript】

このQ&Aのポイント
  • Webサイトにおいて、リンクの制御方法を探しています。テスト4のリンク先が存在しない場合、リンク先への遷移を制御する方法を教えてください。
  • XHTMLのソース上でリンクを作成し、テスト4のリンク先が存在しない場合、リンク先への遷移を制御する方法を教えてください。
  • リンク先のファイルが存在しない場合、リンク先への遷移を制御する方法をCSSやJavaScriptを使用して教えてください。
回答を見る
  • ベストアンサー

リンクに関する制御について【XHTML&CSS&JavaScript】

【XHTML&CSS】 リンク制御について Webサイトにおいて、現在リンクの制御の方法をどうしたらいいのかわかりません。(JavaScriptについては初心者です。) XHTMLのソース上においてリンクを以下のように記述し、 <ul> <li><a href="../link/test1.html">テスト1</a></li> <li><a href="../link/test2.html">テスト2</a></li> <li><a href="../link/test3.html">テスト3</a></li> <li><a href="../link/test4.html">テスト4</a></li> </ul> 上記のようにリストを作成するが、テスト1からテスト3まではリンク先のファイルが存在するが、テスト4についてはファイルが存在しない。 この状態では、 通常であればテスト4は"404 Not Found「ページが存在しません。」などのエラーが表示されます。 これをCSSまたは、JavaScriptなどで制御して、 リンク先のファイル(test4.html)を探しに行って存在しない場合、 リンク先へ遷移させないようにはするにはどうしたら実現可能でしょうか? よろしくお願いします。

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

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.3

「存在チェックして、なったらその<a>要素のリンクイベントを殺す といった処理」は具体的にはどのような構成にすべきなのでしょうか?」 AJAX利用といっても同期通信ですが、</body>の直前に、下のJAVASCRIPT を入れると、少なくとも自サイト内の存在チェックは出来ます。 あまり意味のある事とは思えないのですが... <script type="text/javascript" charset="utf-8"> <!-- var links=document.getElementsByTagName("a"); for(var i=links.length-1;i>=0;i--){ var chk= ajax_chk(links[i].getAttribute("href")); if (chk!=200 && chk!=0){; //消す場合 links[i].parentNode.removeChild(links[i]); /* 置き換える場合 var span= document.createElement("span"); span.innerHTML=links[i].getAttribute("href") +'は存在しません。'; links[i].parentNode.replaceChild(span,links[i]); */ } } function ajax_chk(url){ var xmlHttp =(window.ActiveXObject)?new ActiveXObject("Msxml2.XMLHTTP"):new XMLHttpRequest(); xmlHttp.open("GET",url,false); try{ xmlHttp.send(null); return xmlHttp.status; }catch(e){ return 0; } } // --> </script>

xakatukix
質問者

お礼

yyr446さん、親切にご教授いただきありがとうございました。 教えていただいたソースでうまく動かすことができました。

xakatukix
質問者

補足

yyr446さんありがとうございます。 「存在チェックして、なったらその<a>要素のリンクイベントを殺す といった処理」についてはyyr446さんから頂いた回答内にあった文字をコピペさせてもらいました。 「まあ、<a href="../link/test4.html">となっているから自分のサイト内のファイルなのでしょうね。それなら、ダミーのフレームに読み込ませるとか、非同期通信でHTTPリクエストするとかして、存在チェックして、なったらその<a>要素のリンクイベントを殺すといった処理で可能かもしれませんが。」 ↑の中の文章を使用させていただき、それを実現するにはどうしたらいいのかわからず質問させていただきました。 本件については、 1.複数ページにわたって共通の構成(テンプレートであったりイメージマップなど)から   のリンク<a>のファイルをチェックする。 2.ファイルチェックにより存在すれば、そのままリンクを生かす。 3.存在しない場合はa="#"などに変更して遷移できない状態にする。 のような構成を実現したいのですが。 「あまり意味のある事とは思えないのですが...」 おっしゃられている通りかもしれません・・・ ですが、やってみたいという思いが先行していますので、最後までやりたいと思っています。結果できなかったとしても現在の自分にとってはプラスになると思っています。

その他の回答 (3)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.4

ついでに 「3.存在しない場合はa="#"などに変更して遷移できない状態にする。」 のやり方はNo.2のサンプルで f (chk!=200 && chk!=0){; links[i].setAttribute("href","javascript:void(0);"); } とでもしておけばよい。href=#だと無駄な動作が起きるのでは...

xakatukix
質問者

お礼

yyr446さん、親切にご教授いただきありがとうございました。 教えていただいたソースでうまく動かすことができました。

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

まあ、<a href="../link/test4.html">となっているから 自分のサイト内のファイルなのでしょうね。 それなら、ダミーのフレームに読み込ませるとか、 非同期通信でHTTPリクエストするとかして、 存在チェックして、なったらその<a>要素のリンクイベントを殺す といった処理で可能かもしれませんが。  苦労してやっても、ほとんどやる意味ないですね。 自分のサイトにあるページぐらい、しっかり管理して、リンクを 直すべきかと。 ※私も、人のことは言えませんが......

xakatukix
質問者

補足

確かにyyr446さんの言うとおりかもしれませんが、 <ul></ul>内が各ページ共通である場合、 リンクを1つ修正すると他のページも全て修正しないといけない状態になります。これをいかに少ない時間で修正することが可能かを模索していて、質問させていただいた機能はできないものか考えていました。 自分のサイトではそうですが、他の方のサイトで仕事であればコストが削減できる内容であると思いますが。 非同期通信ということはAjaxを使用するということでしょうか? JavaScriptおよびAjaxは現在勉強中でまだわからない部分が多いのですが、もしできましたら「非同期通信でHTTPリクエストするとかして、 存在チェックして、なったらその<a>要素のリンクイベントを殺す といった処理」は具体的にはどのような構成にすべきなのでしょうか?

回答No.1

基本的に、javascriptはクライアントPCで動作するので、 クライアントPCから、サーバ側ファイル(test4.html)の 存在チェックを含め操作は出来ません。 asp,jsp,cgiなどサーバ側で制御します。

関連するQ&A

  • XHTML+CSS フッターのcopyが2重になってしまいます

    XHTML+CSSでのホームページ作成で、 IE6のみフッター部分の下に、 Copyright 2008 ///////// All Rights Reserved.の erved.の部分が2重に表示されてしまいます。 どなたかご教授お願い致します。 *HTML <div id="footer"> <div id="footernavi"> <ul> <li><a href="index.html">テスト</a>|</li> <li><a href="index.html">テスト</a>|</li> <li><a href="index.html">テスト</a>|</li> <li><a href="index.html">テスト</a>|</li> <li><a href="index.html">テスト</a>|</li> <li><a href="index.html">テスト</a>|</li> <li><a href="index.html">テスト</a>|</li> </ul> </div> <p>Copyright 2008 ///////// All Rights Reserved.</p> </div> *CSS #footer { background: url(image/footer.gif) repeat; float: left; height: 70px; width: 710px; padding-top: 40px; padding-left: 40px; display: block; font-size: 12px; color: #333333; } #footernavi { height: 20px; width: 710px; float: none; line-height: 20px; } #footernavi ul { float: left; height: 20px; width: 710px; margin: 0px; padding: 0px; } #footernavi ul li { float: left; list-style-type: none; font-size: 12px; color: #333333; } #footernavi ul li a { list-style-type: none; font-size: 12px; color: #333333; text-decoration: none; }

    • ベストアンサー
    • HTML
  • xhtmlでページを作ったらcssのhoverの部分がFirefoxで

    xhtmlでページを作ったらcssのhoverの部分がFirefoxでは動くのにIEでは上手く動きません。 どうしたらいいのでしょうか? --xhtml-- <div class="menu"> <ul> <li><a href="#"target="content">link1</a><br/></li> <li><a href="#"target="content">link2</a><br/></li> <li><a href="#"target="content">link3</a><br/></li> </ul> </div> --css-- .menu{ width:100%; position:absolute; bottom:25%; font-weight:bolder; filter: alpha(opacity=70); -moz-opacity:0.70; opacity:0.70; } .menu ul{ margin:0; padding:0; } .menu li{ margin-bottom:1px; list-style-type:none; float:none; font-size:1.3em; line-height:0; } .menu li a{ display:block; width:100%; line-height:25px; background-color:#ba2029; color:#ffffff; text-align:center; text-decoration:none; border-left:solid 10px #880000; } .menu li a:hover{ background-color:#95195a; }

    • ベストアンサー
    • HTML
  • リンクがうまくできません。

    リンクがうまくできません。 ホームページのテンプレートをダウンロードし、メモ帳で編集しているところです。 ダウンロードしたものの中にindex.html(トップページ)とpage1.html(リンク先)が入っています。 トップページにリンクを他にも作りたいので、page2,page3,・・とつくったのですが、 <UL id="menu"> <LI><A href="page1.html">about</A></LI> <LI><A href="page2.html">photo</A></LI> <LI><A href="page3.html">blog</A></LI> <LI><A href="page4.html">link</A></LI> <LI><A href="page5.html">mail</A></LI> </UL> こうした場合に、page1.htmlはちゃんとリンクできるのですが、それ以外のリンクが出来ません。 何か間違えているんでしょうか? それとも、他に何かしなくてはならないことがあるんでしょうか? 初歩的な質問かもしれませんが、よろしくお願いします。

  • css、liを「display:inline;」で横に並べたら“上下”に隙間が空いてしまいます。

    苦しんでいます。宜しくお力をお貸し下さい。  以下のように、cssでリストを横に並べたら、liの上下に隙間が出来てしまいます。試しに、全てのmarginとpaddingに0を当てても改善されません。  よく言われる横方向に出来る隙間は理由が分かっていて、あえて間隔を空けているのですが、上下方向の隙間を無くしたいと思っています。  IE6では上下の隙間は空きませんでした。Ff2とNN7での問題なので、私の記述がおかしいのだと思うのですが、宜しくご指摘お願い致します。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <!--<?xml version="1.0" encoding="Shift_Jis"?>IE対策--> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja"> <head> <title>test</title> <style type="text/css"> /* ページ全体 */ * { margin: 0px; padding: 0px;} body { background-color: powderblue;} /* ロアナビゲーション */ div#lowernavigation { width: 700px; clear: both; background-color: white; border-top: solid 1px mediumpurple;} div#lowernavigation ul { text-align: center; background-color: red;} div#lowernavigation li { font-size: x-small; list-style-type: none; line-height: 0.5em; display: inline; margin: 0px 3px; background-color: orange;} div#lowernavigation a { color: mediumpurple; text-decoration: none;} </style> </head> <body> <div id="lowernavigation"> <ul> <li><a href="link1.html" title="link1">link1</a></li> <li><a href="link2.html" title="link2">link2</a></li> <li><a href="link3.html" title="link3">link3</a></li> <li><a href="link4.html" title="link4">link4</a></li> <li><a href="link5.html" title="link5">link5</a></li> <li><a href="link6.html" title="link6">link6</a></li> <li><a href="link7.html" title="link7">link7</a></li> <li><a href="link8.html" title="link8">link8</a></li> <li><a href="link9.html" title="link9">link9</a></li> <li><a href="link10.html" title="link10">link10</a></li> <li><a href="link11.html" title="link11">link11</a></li> </ul> </div> </body> </html>

    • ベストアンサー
    • CSS
  • javascriptとCSSを使ってのドロップダウンメニュー作成

    CSSとJavaScriptを使って ドロップダウンメニューを作ろうと思っているのですが JavaScriptがうまく作動していないためか FireFoxでは表示されるのですが IE6では動きません。 ご教授お願い致します。 ■index.html <head> <script src="javascript/menu.js" type="text/javascript"></script> </head> <div id="nav"> <ul> <li id="category"><a href="~">category</a> <ul> <li><a href="~">Overview</a></li> <li><a href="~">Overview</a></li> </ul> <ul> <li id="category"><a href="~">category</a> <ul> <li><a href="~">Overview</a></li> <li><a href="~">Overview</a></li> </ul> </div> ■menu.js function menuHover() {var menuItems = d.getElementById("nav").getElementsByTagName("li"); for (var i = 0, miL = menuItems.length; i < miL; i++) { menuItems[i].onmouseover = function() { this.className = "mnhover"; } menuItems[i].onmouseout = function() { this.className = ""; } window.onload = menuHover();

  • JavaScriptによるCSS変更がIE以外のFirefox,Operaなどで動作しない

    id="tab"要素の背景画像positionをJavaScriptで動的に変更したいのですが、以下のソースではFirefox、Operaで動作しません。IEでは動作確認できました。 原因がわからないのでこちらでお聞きすることにしました。 よろしくお願いします。 <!-- HTMLソース --> <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> <meta http-equiv="content-script-type" content="text/javascript" /> <link rel="stylesheet"href="test.css"type="text/css" /> <script type="text/javascript" src="test.js"></script> <title>test</title> </head> <body> <div id="javascript_tab_sample"> <ul class="tabstyle"id="tab"> <li><a href="###" onclick="effect1()">title1</a></li> <li><a href="###" onclick="effect2()">title2</a></li> <li><a href="###" onclick="effect3()">title3</a></li> </ul> </div> </body> </html> /*-- CSSソース --*/ ul.tabstyle { list-style:none; } div#javascript_tab_sample ul#tab { background:url('./backimg.png');/*デフォルト背景*/ float:left; width:100%; } div#javascript_tab_sample ul#tab li { height: 41px;/*縦幅*/ padding:0em 0; text-align:center; border-bottom:none; float:left; width:5em; } /*-- JavaScriptソース --*/ function effect1(){ var element1 = document.getElementById('tab'); element1.style.backgroundPositionY='0'; } function effect2(){ var element2 = document.getElementById('tab'); element2.style.backgroundPositionY='82'; } function effect3(){ var element3 = document.getElementById('tab'); element3.style.backgroundPositionY='41'; }

  • CSSとJavaScriptを使ってドロップダウンメニュー

    こんにちわ。 IE6、IE7上で動くHTMLを作成しています。 スタイルシートとJavaScriptを使ってドロップダウンメニューを実現しようと思ってます。IE6では問題ありませんがIE7で次の現象がッ発生します。 ブラウザ内で表示されている文字を反転させて、親メニュー上をマウスオーバーしていくと、マウスがメニューから離れたあとも、サブメニューの残像が残ります。 以下にサンプルソースを記載いたします。 親メニューはてすと、てすと2。 ”てすと”メニューには、サブ1、サブ2、 ”てすと2”メニューには、サブ3、サブ4のサブメニューを構成させています。 IE7でもマウスアウトさせた際、サブメニューの残像が残らないようにするには、どのような修正を加えるべきでしょうか? 原因と対策方法、ご教授ください。 test.html --------------------------- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <link rel=stylesheet type=text/css href=default.css> <title>TEST Homepage</title> </head> <body> <div id='menu'> <ul> <li><a target='_top' href='a.html'>てすと</a> <ul><li><a target='_top' href='b.html'>サブ1</a> <li><a target='_top' href='c.html'>サブ2</a></li> </li> </ul> </li> <li><a target='_top' href='a.html'>てすと2</a> <ul><li><a target='_top' href='b.html'>サブ3</a> <li><a target='_top' href='c.html'>サブ4</a></li> </li> </ul> </li> </ul> </div> <script type='text/javascript'> sfHover = function() { var sfEls = document.getElementById("menu").getElementsByTagName("LI"); for (var i=0; i<sfEls.length; i++) { sfEls[i].onmouseover=function() { this.className+=" sfhover"; } sfEls[i].onmouseout=function() { this.className=this.className.replace(new RegExp(" sfhover\\b"), ""); } } } if (window.attachEvent) window.attachEvent("onload", sfHover); </script> <br> <br> <br> <hr> IE7の場合、ここをマウスカーソル反転させててすと1→てすと2メニューをhoverさせると!てすと1のサブメニューの残像が残る。 IE6は問題なし。 ------------------------------------------ CSSスタイルシート ------------------------------------------ #menu { width: 750px; margin: 0 auto; padding-top: 11px; white-space: nowrap; } #menu ul { padding: 0; margin: 0; margin-left:auto; margin-right:auto; list-style: none; } #menu li { float: left; background: #87CEFA; margin-right: 3px; border-top: 4px solid #00aaaa; } #menu li:hover, #menu li.sfhover { background: #BFFF00; } #menu li ul { position: absolute; width: auto; left: -999em; border:2px solid white; border-top:none; } #menu li:hover ul, #menu li.sfhover ul { left: auto; } #menu li ul li { float: none; margin-right: 0px; border-top:2px solid white;; text-align:left; } #menu a { display: block; width: auto; padding: 20px 5px 5px 5px; color: #000000; } #menu a:hover { color: #000000; } #menu li ul li a { padding: 5px 5px 5px 5px; } ------------------------------------------ 以上、宜しくお願いいたします。

  • cssで作成する多階層リスト

    こんにちは。 cssで ・縦並びのリストに対して、マウスをもっていくと横にどんどん下位階層のリストが表示されるようする ・下位リストにマウスがいっても上位リストの選択の色はそのままにしたい 以上のように作成したいのですが、 そのcssの記述がわかりません。 色々サイトで探しましたが見つからず。。。 どなたか教えてください。 ◆HTML <!DOCTYPE html> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> <title>多階層</title> </head> <body> <br> <div id="MainDiv"> <div id="gnav"> <ul> <li><a href="#">テスト(1)</a> <ul> <li><a href="#">てすと(1)-1</a> <ul> <li><a href="#">TEST(1)-1-1</a> <ul> <li><a href="#">テスト(1)-1-1-1</a> <ul> <li><a href="#">TEST(1)-1-1-1-1</a></li> <li><a href="#">TEST(1)-1-1-1-2</a></li> <li><a href="#">TEST(1)-1-1-1-3</a></li> <li><a href="#">TEST(1)-1-1-1-4</a></li> <li><a href="#">TEST(1)-1-1-1-5</a></li> </ul> </li> <li><a href="#">テスト(1)-1-1-2</a> <ul> <li><a href="#">TEST(1)-1-1-2-1</a></li> <li><a href="#">TEST(1)-1-1-2-2</a></li> <li><a href="#">TEST(1)-1-1-2-3</a></li> <li><a href="#">TEST(1)-1-1-2-4</a></li> <li><a href="#">TEST(1)-1-1-2-5</a></li> </ul> </li> </ul> </li> <li><a href="#">TEST(1)-1-2</a> <ul> <li><a href="#">テスト(1)-1-2-1</a> <ul> <li><a href="#">TEST(1)-1-2-1-1</a></li> <li><a href="#">TEST(1)-1-2-1-2</a></li> <li><a href="#">TEST(1)-1-2-1-3</a></li> <li><a href="#">TEST(1)-1-2-1-4</a></li> <li><a href="#">TEST(1)-1-2-1-5</a></li> </ul> </li> <li><a href="#">テスト(1)-1-2-2</a> <ul> <li><a href="#">TEST(1)-1-2-2-1</a></li> <li><a href="#">TEST(1)-1-2-2-2</a></li> <li><a href="#">TEST(1)-1-2-2-3</a></li> <li><a href="#">TEST(1)-1-2-2-4</a></li> <li><a href="#">TEST(1)-1-2-2-5</a></li> </ul> </li> </ul> </li> </ul> </li> <li><a href="#">てすと(1)-2</a></li> <li><a href="#">てすと(1)-3</a></li> <li><a href="#">てすと(1)-4</a></li> </ul> </li> <li><a href="#">テスト(2)</a> </li> </ul> </div> </div> </body> </html> ◆CSS body { font-size: 13px; font-family: "Meiryo UI", "MS Pゴシック", "MS PGothic", "MS UI Gothic", "MS ゴシック", "MS 明朝"; } #MainDiv { overflow: hidden; width: 1000px; margin: 0; } /* 全角カタカナ階層 */ #gnav { float: left; width: 150px; height: 200px; } #gnav ul { margin: 0; padding: 0; border-top: 1px #FFFFFF solid; list-style-type: none; } #gnav ul li { width: 150px; height: 24px; text-align: center; background: #c8d6e8; border-bottom: 1px #FFFFFF solid; } #gnav ul li a { display: block; width: 150px; height: 24px; color: #000000; font-size: 100%; line-height: 1.6; background: #6495ed; text-decoration: none; } /* ※.子メニュー以下にマウスがあるときも親メニューの色は変わったにしたい */ #gnav ul li:hover > a { background: #ffa500; } /* 全角ひらがな階層 */ #gnav ul li ul { display: none; list-style-type: none; } #gnav ul li:hover ul { display: block; position: relative; top: -25px; left: 152px; width: 150px; height: 25px; }

  • CSSの「a」と「a:link」の違いを教えてください。

    CSSでリストを横に並べて、グローバルナビゲーションを作っているのですが、aとa:linkの違いがわかりません。 例えばHTMLは以下のように <div id="gNavi"> <ul> <li><a href="../omotenashi.html">おもてなし</a></li> <li><a href="../stay.html">過ごし方</a></li> <li><a href="../rooms.html">客室</a></li> <li><a href="../facilities.html">館内施設</a></li> <li><a href="../dish.html">料理</a></li> <li class="last"><a href="../onsen.html">温泉</a></li> </ul> </div> CSSは #gNavi { height: 60px; width: 960px; margin-right: auto; margin-left: auto; } #gNavi ul { text-align: center; } #gNavi ul li { display: inline; border-right-width: 1px; border-right-style: solid; border-right-color: #FFF; width: 159px; float: left; } #gNavi ul li.last { border-right-style: none; } #gNavi ul li a { background-color: #F00; width: 159px; float: left; } #gNavi ul li a:hover { background-color: #09F; color: #FFF; width: 159px; float: left; } という風に書きますが(間違っているかもしれません。)、#gNavi ul li aを#gNavi ul li a:linkと書いてはいけないのでしょうか? aとa:linkの違いはなんですか?

    • ベストアンサー
    • HTML
  • JavaScriptで折りたたみメニュー

    現在、JavaScriptを利用して折りたたみメニューを作成しました。 2つの項目の下にそれぞれ下層メニューがあり、各項目をクリックするごとに下層メニューが開いたり閉じたりできる状態なのですが、 このどちらかの項目をクリックしたとき、その項目の下層メニューは表示されるが、もう一方の項目の下層メニューは閉じる。というようにするにはどうすればよいでしょうか?(両方の下層メニューが同時に開いている状態が無いように。) よろしくお願いいたします。 【XHTML】 <ul> <li><a href="javascript:exMenu('treeMenu1')">項目1</a> <ul id="treeMenu1" style="display:none"> <li><a href="#">項目1-1</a></li> <li><a href="#">項目1-2</a></li> <li><a href="#">項目1-3</a></li> </ul> </li> <li><a href="javascript:exMenu('treeMenu2')">項目2</a> <ul id="treeMenu2" style="display:none"> <li><a href="#">項目2-1</a></li> <li><a href="#">項目2-2</a></li> <li><a href="#">項目2-3</a></li> </ul> </li> </ul> 【JavaScript】 function exMenu(tName) { tMenu = document.getElementById(tName).style; if (tMenu.display == 'none') tMenu.display = "block"; else tMenu.display = "none"; }

専門家に質問してみよう