質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

10498閲覧

パラメーター分岐のSplitエラー回避方法

a2s

総合スコア39

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2016/06/02 12:30

編集2016/06/02 12:31

パラメータなしで閲覧した際に発生するsplitのエラーを回避させたいです。

http://irohacross.net/2016/04/jquery_tabpram.html
こちらのサイトを参考に、タブの切り替え&指定タブへのダイレクトリンクを実装しました。

以下JSで問題なく動くのですが、
パラメータなしで閲覧した場合、Chromeのデベロッパーツールで見ると、
【Uncaught TypeError: Cannot read property 'split' of undefined】
が表示されています。
これをJSで回避させたいのですが、記述がわかりませんでした。
どなたかお教えいただけないでしょうか。

・hoge.htmlとtab.htmlを表示した際に、splitエラーが出る
・hoge.html?no=tab1など、?no=tabがついた場合はエラーが出ない
hoge.html

<ul class="tab_area"> <li id="tab1" class="select">タブ1</a></li> <li id="tab2">タブ2</a></li> </ul> <div class="content_area"> hoge.htmlのタブ1の中身 <a href="tab.html?no=tab1">tab.htmlのタブ1へのリンク</a> </div> <div class="content_area hide"> hoge.htmlのタブ2の中身 <a href="tab.html?no=tab2">tab.htmlのタブ2へのリンク</a> </div>

tab.html

<ul class="tab_area"> <li id="tab1" class="select">タブ1</a></li> <li id="tab2">タブ2</a></li> </ul> <div class="content_area"> tab.htmlのタブ1の中身 <a href="hoge.html?no=tab1">hoge.htmlのタブ1へのリンク</a> </div> <div class="content_area hide"> tab.htmlのタブ2の中身 <a href="hoge.html?no=tab2">hoge.htmlのタブ2へのリンク</a> </div>

Javascript

$(function() { $('ul.tab_area li').click(function() { var index = $('ul.tab_area li').index(this); $('.content_area').css('display','none'); $('.content_area').eq(index).show(); $('.tab_area li').removeClass('select'); $(this).addClass('select'); }); var url = location.href; url = (url.match(/\?no=tab\d+$/) || [])[0]; var params = url.split("?"); //ここがエラーになる var tab = params[1].split("="); if($(tab).length){ var tabname = tab[1]; } else { var tabname = "tab2"; } $('.content_area').css('display','none'); $('.tab_area li').removeClass('select'); var tabno = $('ul.tab_area li#' + tabname).index(); $('.content_area').eq(tabno).show(); $('ul.tab_area li').eq(tabno).addClass('select'); });

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

location.href に ? が含まれなかったら、以下の解析処理をやらない
ってのじゃだめですかね。

投稿2016/06/02 12:40

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

a2s

2016/06/02 12:47

「解析処理をやらない」で、リンクやタブはきちん動作するものなのでしょうか…? するのであれば、その記述でまったく問題はないのですが…
takasima20

2016/06/02 13:00

「解析処理」ってのは url = (url.match(/\?no=tab\d+$/) || [])[0]; var params = url.split("?"); //ここがエラーになる var tab = params[1].split("="); このへんのことを意図しました。 tab にはなんか適当なのをつっこんどけばいいのかな。
a2s

2016/06/03 00:38

なるほど。 ? が含まれていなかったらその処理はやらなくて良いですね。 記述としてはどんなものがありますでしょうか?
takasima20

2016/06/03 09:18

記述って… 具体的なコーディングですか? match を使ってもいいのですが、単純な文字検索なので indexOf あたりを使えばよいのではないでしょうか。
a2s

2016/06/03 10:23

ありがとうございます! indexOfは勉強不足なこともあり、よくわかっていないのですが… var str = location.href; if ( str.indexOf('?') != -1) { var params = url.split("?"); var tab = params[1].split("="); if($(tab).length){ var tabname = tab[1]; } else { var tabname = "tab2"; } } でとりあえずエラーはなくなりました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問