ページ全体のaタグのhref属性(URL)を書き換えたくJQUERYをつかって以下のコードをループ中で実行すると
$(this).attr('href').replace('/moji','/');
Uncaught TypeError: Cannot read property 'replace' of undefined
がでる箇所があります。
どうも
%e4とかURLエンコードされた文字が入っているとでるようですが何か解りますか?

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。
jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。
JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。
jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。
0グッド
2クリップ
投稿2015/11/10 15:37
ページ全体のaタグのhref属性(URL)を書き換えたくJQUERYをつかって以下のコードをループ中で実行すると
$(this).attr('href').replace('/moji','/');
Uncaught TypeError: Cannot read property 'replace' of undefined
がでる箇所があります。
どうも
%e4とかURLエンコードされた文字が入っているとでるようですが何か解りますか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
JavaScriptはプリミティブ型であるStringでもメソッドを持てる言語ですが、
replaceはそのString型に用意されているメソッドです。
Uncaught TypeError: Cannot read property 'replace' of undefined
上記エラーは「undefined(未定義) な変数はreplaceメソッド持ってないよ!」というエラーです
$(this).attr('href')
の値が文字列として取れてないのでしょうね。
http://www.sitepoint.com/jquery-decode-url-string/
このページによると平然と取れているようですが…
おそらくhrefがないリンク(ボタンリンク等)を掴んでしまったのでは?
とりあえず問題の行の1つ上に以下を仕込んでコンソールで確認してみてください。
Chromeならばコンソールログで表示したものにマウスカーソルを当てると問題の要素が点滅するはずです。
JavaScript
1console.log($(this));
投稿2015/11/10 15:50
総合スコア21482
0
まず、自分が書いたコードのそれぞれのメソッドの仕様を確認して原因を切り分けましょう。
わかりやすい日本語の解説
jQuery リファレンス:attr http://www.jquerystudy.info/reference/attributes/attr.html
miyabi-sunの回答と主の質問内容から、
.href('href')実行時点でundefinedが返ってきているのでは無いかという想像が妥当です。
(実際の原因かどうかは主が対象の環境と実行するコードでデバッグして確かめてください)
さて、「コードを実行するページの全てのaタグが、href属性を持っているという前提でコードを書いたが、実はそうでない場合がある」という原因が考えられる場合以下の対応方法が考えられます。
前者が100%保証できない(と考えるのが既に妥当なように見えます)のであれば、
後者をどうするか決定する必要があります(hrefの入ってないタグは処理せず無視できるようにするなどのことです)
今回の場合は、主は「全体」と言っているので全てを受け入れる(と解釈します)方法を考える必要があり、
href属性が付いてないものが存在するとなると
という条件分岐は最低限必要であることがわかります。
今回は(おそらく)href属性がない場合に、undefinedが返ってくるということがわかっていますので
$(this).attr('href') !== undefinedかどうか条件分岐する必要があるでしょう。
そして、hrefを持っていない場合に対しては置き換える必要が無いので、
.attr()メソッドの値を設定する記法で直接設定してしまえば良いと思います。
(サンプルコードを書きにくい環境から書き込みしているのでサンプルコードを上げることは今回はできません。。)
投稿2015/11/10 22:34
編集2015/11/10 22:40総合スコア98
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/12 22:58
2015/11/12 23:39 編集
2015/11/13 17:15