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

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

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

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

Q&A

1回答

556閲覧

javascriptで要素が無い場合、動作が止まってしまうのを解決したい。

yassandazo

総合スコア2

JavaScript

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

0グッド

0クリップ

投稿2019/08/12 15:16

編集2019/08/12 17:53

前提・実現したいこと

メルカリで出品されている画像のパスを取得するブックマークレットを作成しています。

例えば、
https://www.mercari.com/jp/items/m81694372121/
等のページでjavascriptのブックマークレットを起動させると

let element = d.getElementsByClassName("owl-lazy")[0];
eee1 = element.dataset.src;
f.value=eee1.substring(0,eee1.indexOf("?"));

↑上記の記述で画像を取得することはできますが、

例えば、
d.getElementsByClassName("owl-lazy")[9];
配列を[9]にすると

出品者によっては画像の10枚目などは無い場合があります。
そこでif分を使用し要素がnullかどうか判定して、
10枚目の画像のパスが無い場合は 変数に値を入れない状態にしたいです。

発生している問題・エラーメッセージ

エラーメッセージは無く動作がストップしてしまいます。

エラーメッセージ

該当のソースコード

javascript: (function(){

var d=document,f=d.body.appendChild(d.createElement("input")); let element = d.getElementsByClassName("owl-lazy")[0]; eee1 = element.dataset.src;

if(eee1 == ""){
eee1 = "";
};

f.value=eee1.substring(0,eee1.indexOf("?")); f.select();d.execCommand("copy"); d.body.removeChild(f); alert("コピーしました");

})();

試したこと

if分などでnullじゃないか調べて見ましたが
途中で止まってしまいます。
変数が空の場合はjavascriptは動作をストップさせてしまうのでしょうか?

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

グーグルクロームで動作させたいです。
windows 7

ここにより詳細な情報を記載してください。

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

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

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

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

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

gentaro

2019/08/12 17:50

DataSetのタグは全く関係ないと思われるんで外してください。
guest

回答1

0

要素がないかもしれないのであれば

javascript

1let element = d.getElementsByClassName("owl-lazy"); 2if (element.length > 0) { 3: 4}

で配列のサイズが0かどうかで判断すればいいと思います。

投稿2019/08/12 18:50

編集2019/08/12 18:52
KoichiSugiyama

総合スコア3041

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

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

yassandazo

2019/08/13 08:14

回答ありがとうございます。 javascript: (function(){var d=document, f=d.body.appendChild(d.createElement("input")); let element = d.getElementsByClassName("owl-lazy")[0]; if (element.length > 0) { <!--何も要素が無い場合は空白を入れる--> element.value = "" }; f.select(); d.execCommand("copy"); d.body.removeChild(f); alert("コピーしました");})(); ↑で試してみましたが、上手く動きませんでした・・・・ eee1 = element.dataset.src; element.dataset.srcでdatasetのimgタグを取っているので eee1のlenghtで空白の判定も可能なんでしょうか? どうも動作が止まってしまうみたいです。
KoichiSugiyama

2019/08/13 12:01 編集

よくソースをみてください 誤)let element = d.getElementsByClassName("owl-lazy")[0]; 正)let element = d.getElementsByClassName("owl-lazy"); 要素がないのにあると仮定したコードになっていると、本当にない場合にアクセス違反発生して、そこで止まってしまうと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問