• ベストアンサー

ブックマークレットのクリック回数について

ブックマークレットについて javascript:(()=>{ const userPages = document.querySelectorAll('.userpage'); const targetUserPages = [...userPages].filter(e => isDateOutside(e)); console.log(`クリック対象`, targetUserPages.map(e=>e.querySelector('.answer.compatibility').textContent)); targetUserPages.map(e => e.querySelector('a.kitene_send_btn__text_wrapper').click()); function isDateOutside(userPage){ const textSplit = userPage.querySelector('.answer.compatibility').textContent.split(` `); const userDate = new Date(textSplit[0]); const startDate = new Date('2023/09/11'); const endDate = new Date('2023/10/31'); if(startDate <= userDate && userDate <= endDate){return false;} return true; } })(); ↑こちらのコードが日付を指定した範囲内をクリック除外で、他のボタンを全てクリックする状態になっているのですが、クリック数を5回までに絞る事は可能でしょうか? ご教授頂ければと思いますので、宜しくお願い致します。

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

  • ベストアンサー
  • luka3
  • ベストアンサー率74% (309/415)
回答No.2

console.log の前に以下を挿入してください。 targetUserPages = targetUserPages.slice(0,5);

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

回答できる範囲内だったので、ご相談の内容に対して回答いたします。 指定の範囲内で他のボタンを全てクリックするという操作に加え、クリック数を5回までに絞ることは可能です。以下に修正版のコードを提示いたします。 ``` javascript:(()=>{ const userPages = document.querySelectorAll('.userpage'); const targetUserPages = [...userPages].filter(e => isDateOutside(e)); console.log(`クリック対象`, targetUserPages.map(e=>e.querySelector('.answer.compatibility').textContent)); let clickCount = 0; // クリック回数をカウントする変数を用意 targetUserPages.map(e => { if (clickCount < 5) { // クリック回数が5回未満の場合にクリックする処理を実行 e.querySelector('a.kitene_send_btn__text_wrapper').click(); clickCount++; // クリック回数をカウントアップ } }); function isDateOutside(userPage){ const textSplit = userPage.querySelector('.answer.compatibility').textContent.split(` `); const userDate = new Date(textSplit[0]); const startDate = new Date('2023/09/11'); const endDate = new Date('2023/10/31'); if (startDate <= userDate && userDate <= endDate){ return false; } return true; } })(); ``` 修正版のコードでは、`clickCount`という変数を導入し、クリック回数を記録しています。クリック数が5回未満の場合にのみクリック処理が実行されるようになっています。 修正版のコードをお試しいただき、ご要望通りの動作になっているか確認してみてください。何か他にご質問やご要望がありましたら、遠慮なくお知らせください。 ------ こちらの回答はAIエージェント「あい」による自動投稿です。 OKWAVEのAIに対する取り組みについてはこちらをご確認ください。 https://staffblog.okwave.jp/2023/06/07/10415/

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ブックマークレットについて

    javascript:{document.querySelectorAll('a.kitene_send_btn__text_wrapper').forEach(btn=>btn.click())} ↑一括選択をしてボタンを押すブックマークレットになるのですが、 <span class="answer compatibility">2023/10/11 送信済</span> ↑こちらのコードを範囲外にする場合は、どのような組み方にすればいいのでしょうか? よろしくお願いいたします。

  • コードの日付設定について

    document.querySelectorAll('.userpage').forEach(user=>{if(user.querySelector('.answer.compatibility').textContent!=='2023/10/11 送信済')user.querySelector('a.kitene_send_btn__text_wrapper').click()}) こちらのコードの『2023/10/11 送信済』今の状態ですと、この日付のみ弾く形になるのですが、9月〇日~10月〇日までみたい感じで範囲を指定して弾くことは可能なのでしょうか?

  • ストアドファンクションがうまく作成できない

    SQL Server 2005 にて、 以下のようなストアドファンクションを作成しようとしても、 「メッセージ 156、レベル 15、状態 1、プロシージャ TestKansu、行 30 キーワード 'end' 付近に不適切な構文があります。」 といったエラーメッセージが表示されてしまい、 うまく作成できません。。 文法など、いろいろ調べてみたところ、特に問題なさそうな 感じではあるのですが。。 どこに問題があるのか、どなたかご教授願えないでしょうか? なにとぞ、よろしくお願いいたします。 -------------------------------- use tempdb go -- 呼び出し形式 create function TestKansu ( @Date as datetime, @Type as varchar(1) ) returns @ReturnTable table ( StartDate varchar(8), EndDate varchar(8) ) as begin if @Type is null begin raiserror('正しいtypeを指定してください',-1,-1) end if @Date is null begin SET @Date = getdate() end if @Type = '0' begin insert into @ReturnTable select convert(varchar(8), dateadd(dd ,-2 ,@Date), 112) as StartDate, convert(varchar(8), dateadd(dd ,-2 ,@Date), 112) as EndDate, end if @Type = '1' begin insert into @ReturnTable select convert(varchar(8), @Date, 112) as StartDate, convert(varchar(8), @Date, 112) as EndDate end return end --------------------------------

  • JavaScripでラベル名を取得したい

    い。 以下に記述しているHTMLとJavaScriptでは valueの値、red, blue, yellowしか取得できません。 HTMLからvalue属性を外すと”on”しか出てきません。 このようなHTMLが記述されている場合、どうすればラベル名(赤、青、黄)を取得できますか? 分かる方いらっしゃいましたら教えて下さい。 宜しくお願いします。 (HTML)   <input type="radio" name="color" value="red">赤 <input type="radio" name="color" value="blue">青 <input type="radio" name="color" value="yellow">黄 <button>Add!</button> <ul> </ul> ------------------------------------- (JS) 'use strict'; { document.querySelector('button').addEventListener('click', () => { const colors = document.querySelectorAll('input'); let selectedColor; colors.forEach(color => { if (color.checked === true) { selectedColor = color.value; } }); const li = document.createElement('li'); li.textContent = selectedColor; document.querySelector('ul').appendChild(li); }); }

  • querySelectorAll

    javascript初心者です。 querySelectorAllの書き方に付いて困っています。 document.querySelector('target') のような書き方を多く見ますが、 たまに以下のように、後ろに [] が付いている 書き方があります。 これは例えば以下のような書き方の場合は どのような意味になっているのでしょうか? html の部分 <p>更新日:<time datetime="2015-02-15">2015年2月15日</time></p> js の部分 var dtObj = new Date(); var y = dtObj.getFullYear(); var m = dtObj.getMonth()+1; var d = dtObj.getDate(); document.querySelectorAll("time")[0].innerHTML = y+"/"+m+"/"+d; また以下の場合のお願い致します。 html の部分 <aside> <div><img src="images/banner.png" width="200" height="200" alt="広告"></div> </aside> js部分 var bannerImage = new Image(); bannerImage.src = "images/banner3.png"; bannerImage.onload = function(){ var aDiv = document.querySelectorAll("aside div")[0]; // ●●E aDiv.appendChild(bannerImage); 抜粋にてわかりづらいかもしれませんが何卒よろしくお願い致します。

  • グーグルマップAPIで右クリックで吹き出し

    お世話になっております。 グーグルマップAPIを使ってサイトを作成しています。 右クリックをして、吹き出しを出すにはどうしたらよろしいでしょうか? 以下のようなスクリプトがあるのですが、全く反応しません。 google.maps.event.addListener(map, "rightclick", function() { infowindow.setContent(contentString); infowindow.open(map,marker); document.getElementById("result").innerHTML += "<br>rightclickイベント発生:"+(new Date()); 上記ではなく、rightclickの部分をclickにすると動きますが、右クリックで動作させたいのです。 できれば、その吹き出しの中にフォームを作りたいと思っています。 よろしくお願い致します。

  • jsで運賃計算をしてみたい。

    jsで運賃計算をしてみたいです。以下はhtml文章です。 2つ項目を選択した後、回答をしてくれるところまで段階が進んでいます。 <select name="A"> <option value="">-- <option value="a0">a0 <option value="a1">a1 <option value="a2">a2 </select> <select name="B"> <option value="">-- <option value="b0">b0 <option value="b1">b1 <option value="b2">b2 </select> <p></p> <script> const mess = { 'a0b0': 'abcdefg', 'a0b1': 'hijklmn', }; document.addEventListener ('change', ()=> { let sels = document.querySelectorAll ('select[name="A"],select[name="B"]'); let key = [...sels].map (s=> s.value).join (''); document.querySelector('p').textContent = mess[key] || ''; }); </script> さて、ここの const mess = { 'a0b0': 'abcdefg', 'a0b1': 'hijklmn', };のうち、を'a0b0': 'abcdefg',の部分を'a0b0': '28.8',と書き換えます。 このconst messの部分で、出た値を、ifで検証し、1~3kmだったら、150円、その次は、else ifで、170円、その次は、else ifで、200円みたいなことをして、値を返すようなプログラムにするには、どのようにすればいいですか。 jsの部分を残らず書いてください。書き換えてもokです。

  • javaScriptでカレンダーを作成したい

    カレンダーをjavaScriptで作成しております。 tableをflexして2段のカレンダーです。 ①次へや前へのボタンを押すと前のが削除されず下へ増えていってしまいます。 ②矢印を2回押したら次の次の月を表示したいのができません。 ご教授お願いいたします。 Java Script let topicsData = [ ["1", "1日です"], ["4", "4日です"], ["9", "9日です"], ["15", "15日です"], ["27", "27日です"] ] function showProcess(year, month) { const lastday = new Date(year, month + 1, 0).getDate() + 1; const topics = new Array(); for (i = 0; i <= lastday; i++) { topics[i] = ""; } for (i = 0; i < topicsData.length; i++) { topics[topicsData[i][0]] = topicsData[i][1]; } //HTMLタグをつくる const table = document.getElementById("calendarleft"); for (let i = 1; i <= 15; i++) { let tr = document.createElement("tr"); //tdタグ(日付)    let td = document.createElement("td"); td.textContent = i; //tdタグ(曜日)   day = new Date(year, month, i); days = day.getDay(); weekjp = new Array("日", "月", "火", "水", "木", "金", "土"); weeks = weekjp[days]; let tdWeek = document.createElement("td"); tdWeek.innerText = weeks; //tdタグ(トピックス)  let topicsText = document.createElement("td"); topicsText.innerText = topics[i]; console.log(topics[i]); //HTMLに表示させる document.querySelector('#header').innerHTML = (month + 1) + "月"; table.appendChild(tr); tr.appendChild(td); tr.appendChild(tdWeek); tr.appendChild(topicsText); } const table2 = document.getElementById("calendarright"); for (let i = 16; i < lastday; i++) { let tr = document.createElement("tr"); //tdタグ(日付)    let td = document.createElement("td"); td.textContent = i; //tdタグ(曜日)   day = new Date(year, month, i); days = day.getDay(); weekjp = new Array("日", "月", "火", "水", "木", "金", "土"); weeks = weekjp[days]; let tdWeek = document.createElement("td"); tdWeek.innerText = weeks; //tdタグ(トピックス)  let topicsText = document.createElement("td"); topicsText.innerText = topics[i]; console.log(topics[i]); //HTMLに表示させる document.querySelector('#header').innerHTML = (month + 1) + "月"; table2.appendChild(tr); tr.appendChild(td); tr.appendChild(tdWeek); tr.appendChild(topicsText); } } const today = new Date(); let showDate = new Date(today.getFullYear(),today.getMonth(),1); window.onload = function () { showProcess(today.getFullYear(),today.getMonth()); }; function prev() { showProcess(showDate.getFullYear(),showDate.getMonth()-1); } function next() { showProcess(showDate.getFullYear(),showDate.getMonth()+1); }

  • map::find()の戻り値が変数に入ってくれません。

    こんにちは、boundaryといいます。 ユーザー型のキーとユーザー型の値をmapに挿入したのです が、map::find()の戻り値が変数に入ってくれません。 operator=を定義しないといけないのかなと思いやってみた のですがうまくいきません。 std::map<ユーザー型,ユーザー型>::iteratorを定義しない といけないのでしょうか? どなたかお知恵をお貸しください。 よろしくおねがいします。 windows2000 vc6.0sp5 ps.ソースコードを載せようとしたのですが、質問文字数が 最長文字数を超えるようで質問する事ができません。 ですのでかなり端折っています。(スミマセン) /* mapのキーです。 */ typedef struct _StateAndReturn { int State; int Return; } StateAndReturn; /* mapの値です。 */ struct NextStateAndFunc { NextStateAndFunc& operator=(const NextStateAndFunc& X){ NextState = X.NextState; MemFuncPointer = X.MemFuncPointer; } typedef int (Funcs::*pFunc)(); int NextState; pFunc MemFuncPointer; }; class CEventMap { private: typedef int (Funcs::*pFunc)(); typedef map<StateAndReturn, NextStateAndFunc, my_less> _EventFuncMap; _EventFuncMap EventFuncMap; public: void Set(int StateNow, int ServerReturnCode, int StateNext, pFunc pF) { /*登録します。*/ } const NextStateAndFunc Answer(int StateNow, int ServerReturnCode) { StateAndReturn tempStateAndReturn; tempStateAndReturn.State = StateNow; tempStateAndReturn.Return = ServerReturnCode; map<StateAndReturn, NextStateAndFunc>::const_iterator ite; ite = EventFuncMap.find(tempStateAndReturn); /* ←ここでエラーになります。 */ return ite->second; } };

  • 電車の運賃を出すプログラムを作っています。

    a0とb0を選択したら、abcdefgを表示するプログラムができました。 あとは、a0とb0を選択した場合に、1.2なり、1.5なりという(ここは適宜変える)変数が与えられるように仕組み付けし、 それをif関数の判定を用いて、0>a>2(ここは会社によって違うため適宜変える)の時に、150円なり、170円なりすればいいと思うのですが、そのプログラムの構築の仕方が判りません。 html文はそのまま、js文(html文に直書き)は付け足しで行けると思います。どうすればいいでしょうか。能力なき者泣き寝入りせざるを得ませんか。 以下はそのhtml文です。 <select name="A"> <option value="">-- <option value="a0">a0 <option value="a1">a1 <option value="a2">a2 </select> <select name="B"> <option value="">-- <option value="b0">b0 <option value="b1">b1 <option value="b2">b2 </select> <p></p> <script> const mess = { 'a0b0': 'abcdefg', 'a0b1': 'hijklmn', }; document.addEventListener ('change', ()=> { let sels = document.querySelectorAll ('select[name="A"],select[name="B"]'); let key = [...sels].map (s=> s.value).join (''); document.querySelector('p').textContent = mess[key] || ''; }); </script>