+ JavaScript の質問用スレッド vol.126 + [転載禁止]©2ch.net
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-4のテンプレを読んだ上で質問してください。
■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
(ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
※必ず「問題の事象が再現されること」を確認してください。
必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。 >>313
じゃ、タイトル詐欺スレを削除すれば解決だね 【環境】iOS Catalina 10.15.7,GoogleCrome104.0.5112.101
【何をしたのか】Editor.jsでデータを受け渡す方法について知りたいです。
【エラーメッセージ】そもそも方法がわからないのでエラー等は発生してません。
【期待する結果】Editor.jsで入力したデータを次のページで内容チェックし、更にMySQLへ登録したい。また、記事の編集の際にはMySQLからデータを読み出し、Editor.js上で編集したい。
【サンプルコード】このサイトとまったく同じ状態です。https://reffect.co.jp/html/block-styled-editor-js#i-2
勉強のため自作のブログ投稿用CMSを作成しています。
formとphpで基本的な記事投稿(入力→実際の表示確認→MySQL登録)、記事の再編集(MySQLからのデータ読み込み→投稿フォームへの再表示→編集→MySQL更新)は完成しました。
ただ、現状では画像や表、リストなどを挿入するときにいちいちhtmlタグを入れなければいけないことから、WYSIWYGのひとつEditor.jsを使ってタグを自動生成したいと思っています。
phpのときには教科書どおりinputにnameをつけてPOSTでデータを受け渡してましたが、Editor.jsではdivにテキストエディタを表示させることから、どうやってデータを受け渡すのかつまずいています。
上記サイトではボタンを押すとconsoleに取得データを表示していますが、ボタンを押すと実際の記事表示を確認できるようにしたいと思っています。
どのようなやり方があるでしょうか。お力を貸してください。 >>315
console.logする代わりにデータ(JSON)を確認画面に渡して
確認画面側でEditorJSをreadonlyで表示するか
同じ画面でreadonly viewとedit viewとtoggleさせる(EditorJSのreadonly.toggle)
サーバーにPOSTするのはJSON Ruby on Rails では、WYSIWYG エディターは、
Railsの作者・DHH の会社である、Basecamp 製のtrix を使う JavaScriptスレは荒らされる前は平和だったんだけどね
今は見る影もない 今何とか機能してるのって愚痴スレとHTMLCSS質問スレとPHP質問スレがギリギリって感じか
語ることなんて特にないし仕方ないね HTMLスレは板基準にすれば進んでるよなぁ
まあ最初にやるのがそれってのもあるけど。
初学者がくるようになればこっちも盛り上がるんだろうな?なるよな? 正直調べりゃ分かるからこっちに書き込むエネルギーなんて一々使わないだろってとこは思ってる
jsまで興味を持ったのなら調べるスキルっつーか知識欲も持ち合わせてるだろうし
その結果がこれよ >>321
PHPの質問スレは板が違う
まあ向こうも同じようなもんだけど javascriptもPHPもオワコン。
そしてプログラミングの初学者には難しすぎる
初心者はRubyから学習を始めるべき。
そしてRuby on Railsを習得すればPHPは不要
こっちのスレで質問すれば親切な達人プログラマーがどんな質問にも懇切丁寧に答えてくれる。
↓
Ruby 初心者スレッド Part 67
https://mevius.5ch.net/test/read.cgi/tech/1608837867/ >>325
https://mevius.5ch.net/test/read.cgi/tech/1608837867/512
> 512 デフォルトの名無しさん (ワッチョイ 027c-5Ix7) sage 2022/08/19(金) 13:31:40.23 ID:Gwz5c/EG0
> Rubyガイジがこのスレに誘導しているみたいだけど
> 今更Rubyなんて流行らないし>>503でも指摘されているけど
> 新規案件でRubyやRailsなんて採用しないから初心者が勉強するだけ無駄だぞw RUNTEQ
【知らないと転職無理】未経験エンジニアの疑問全て回答!
www.youtube.com/watch?v=5IzjaC6vEg0
この動画では、Ruby on Rails から始めろと言っている
ウェブ系で最も使われているフレームワーク。
スタートアップでよく使われる
高速開発で、日本語の情報が多い JSで「日付が変わると自動で音が鳴る」というものを作りたいです。 >>328
すいません
JavaScriptで日付が変わると自動で音が鳴るというものを作るにはどうしたらいいですか? >>330
このスレじゃ無理
こっちのスレで質問してみよう。親切な達人プログラマーが懇切丁寧に教えてくれるよ
Ruby 初心者スレッド Part 67
https://mevius.5ch.net/test/read.cgi/tech/1608837867/ >>325,331
4ヶ月前もRuvyスレ移行で受け入れられなかったのに、懲りない人だね 画面遷移に伴って、リクエストヘッダを追加したいときどうすればいいか教えてください。
・1 サーバサイドで「Location」レスポンスヘッダを指定してリダイレクトさせるときに、
リダイレクト先アクセスにリクエストヘッダを添付させることは可能ですか?
・2 ブラウザ側で画面遷移するときに、リクエストヘッダをつけることは可能ですか?
<a>タグ、JavaScriptの「location.href」にリクエストヘッダ追加できますか?
・3 同じく<form>を飛ばすときにリクエストヘッダ付けられますか?
(補足)リクエストヘッダをつけるときに、思い浮かぶのはAjax, XHRを使うことですが、
これを使うと画面遷移は伴いません。
OAuthの勉強をしていて、アクセストークンをブラウザで保持して、それをAuthorizationヘッダーに
添付しないといけないことが分かったので、それをどうやってリクエストヘッダにセットするのかを調べています。
もしあるなら、その実装方法が載っているサイトが見つからなかったので教えてください。 >>335
これを質問した者と同じ者ですが、解決方法が分かったかもしれないので書きます。
まず一度、認証情報なしでアクセスすると、
サーバ側が「401: Authorization Requed」ステータスを返してきて、
そこに「WWW-Authenticate」というレスポンスヘッダで認証が必要である指定が返ってくるので、
それが返ってくるとブラウザは自動でAuthorizationヘッダをセットして再アクセスするので、
サーバサイドは、401を返して、WWW-Authenticateヘッダをレスポンスするように実装しておいて、
一度401でわざと失敗させればよいため、最初から自分でAuthorizationヘッダを添付しなくてもいいのかもしれません。
しかし、ブラウザはそれで自動的に正しいアクセストークンを選んでくれるのでしょうか?
認証サーバ(IdP)から払い出されたアクセストークンをブラウザのローカルストレージか何かに保存しとくと思いますが、
それを適切に選んでくれるかが心配です。 リダイレクト時にカスタムヘッダーを追加するのは無理
ブラウザがローカルストレージから自動的に特定のアクセストークンを取得してヘッダーに追加するようなことがあればセキュリティ的に大問題なのでこれも無理
(カスタムヘッダー無しのCookieだけでいいなら可能)
XHRで取得したレスポンス使ってクライント側JavaScriptで画面を更新する他ない >>337
そのクライアント側JavaScriptで画面を更新するときに、
Authorizationヘッダーを要求されませんか?
そもそも、アクセストークンを要求するのはデータ取得用のAPIだけにとどめておいて、
画面を描画するようなURLに対してアクセストークンを要求してはいけないということでしょうか? 最近までAuthorizationヘッダーがそのままリダイレクトされてたみたいw
https://github.com/whatwg/fetch/pull/1544
HTTPの仕様的にはAuthorizationは削除したほうがいい的なことを書いてるのに・・・
Consider removing header fields that were not automatically generated by the implementation (i.e., those present in the request because they were added by the calling context) where there are security implications; this includes but is not limited to Authorization and Cookie.
https://www.rfc-editor.org/rfc/rfc9110#name-redirection-3xx Ruby on Rails では、Turbolinks を使って、
pjax(ajax と、historyAPI(popState, pushState))を利用して画面遷移する。
通信データを減らすために、body 部分しか変わらない
認証は、退屈な雛形を自動生成する
github.com/abhaynikam/boring_generators
Devise とか、Devise Omniauth(Facebook, GitHub, Google, Twitter)
一番分かりやすい OAuth の説明
qiita.com/TakahikoKawasaki/items/e37caf50776e00e733be
基本、日本の未経験者用のバックエンドで採用しているのは、
YouTube で有名な雑食系エンジニア・KENTA の言う通り、Rails優先 >>339
XHRで非同期でリクエストヘッダを付けてサーバへ送信すると
サーバサイドでLocationヘッダーでリダイレクトすると次のリクエストにも暗黙的に前のリクエストヘッダーが引き継がれるのか?
なかなか複雑だな。
だけどXHRでリダイレクトが帰ってきても自動的には画面遷移しない。
ブラウザ側でlocation.hrefしないと画面遷移しないがこの時はさすがに非同期の戻りのリクエストヘッダは引き継げないだろ。
それと、クロスオリジンでリダイレクトする時もリクエストヘッダー引き継がれるの? 初学者の者です
「Pixiv Filter」というChromeの拡張機能の話なんですけど、この拡張機能の一つに、Pixivの検索結果画面で、イラストごとの割り振られたタグを、本来は表示されない検索結果の画面で表示してくれるというものがある
この機能なんだけど、コード(GitHubで公開されている。URLはスパム対策で貼れない、申し訳ない)を読んでも仕組みがどうにも理解できなかった。
「イラストのURLに飛んで、そこからリンクを取得してくる」といったものかとも思ったが、どうやら違う模様
詳しい方いらっしゃったら、ご教授頂きたいです ざっと見たところ
・作品ごとのタグは検索結果画面には表示されないものの検索結果データとして飛んできている
www.pixiv.net/ajax/search/artworks/***のリプライ内のdata[].tags[]という配列がそれ
・バックグラウンドで取得し直してそれをストレージに格納している
background.tsの123行目あたり
type.d.tsのWorksData型にtags配列あり
・検索画面にそれを表示している
search_page.tsの97行目あたり
実際に拡張機能入れて動かしたわけでもないしソース追っただけだから適当だけど ちょっとしたデータを取得するのに、
「イラストのURLに飛んで、そこからリンクを取得してくる」みたいな、
副問い合わせをやっていたら大変 >>345
ですよね…なんかちょっと変かな?という気はしていました、ありがとうございます
「API」とか「ストレージ」「トークン」「クッキー」みたいな通信の部分がからっきしなもので、色々調べながらやらせて頂きます 漏れらだって、Ruby on Rails, Linux, Docker, AWS Solution Architect しか分からない
>>340
に書いたように、誰かが作った、退屈な雛形を自動生成して作っている
CSRF, Strong Parameter, pjax, place holder、データベースの設計など、
全部Railsで勉強しているだけ >>346
察するにその拡張機能を調査分析するのに必要なスキルがまだ足りてないから
もう少し基礎知識を身につけてから挑んだ方がいいと思うよ
分不相応な挑戦は時間のムダにしかならない
あとRailsはNGワードに入れといた方がいい cssファイルのセレクタに、別のjsonファイルの値をインポートして使える方法とかありませんか?
【jsonファイルの値】{color:green;}
みたいな。 sassファイルに、jsonファイルの読み込みとかってできたりする? コードを1人で書いてます。他人が見ることは100%ありません。
(a) function hoge(){ }
(b) var hoge = function(){ };
の区別や管理はどうしてますか?
・返り値のないものはa、あるものはb
・宣言のみは冒頭、実行の伴うものは後述
というルールで書いていましたが、
1万行近くなって見通しよくするために大まかな機能ごとにまとめるようになり
bが順序的に後述になる箇所が出てきました。
”機能ごと”は今後順序変更する可能性があります。
関数リテラルのメリットがいまいちわかりません。どんなメリットがあるのでしょうか?
また返り値有無関係なく全てaにして不便はありますか? >>351
不便はありません
動的に変数の中身の関数を入れ替えたい場合だけ(b)で >>352
動的に全く違う関数に入れ替えられるのですね、なるほどです。
この件では各関数や引数の目的が明確固定ばかりなのでその場合はなさそうです。
極一部名前付き引数を使用していますが、関数内処理はほぼ一定で、その程度です。
ありがとう。 このJavascriptでdivをタブで切り替え表示のサンプルで
Works、Contactタブにimg srcで画像を埋め込んでた場合
Works、Contactタブを選んだ時にだけ画像や内容を読み込む動作ってどうやるの
ttps://posipan.com/js-tab/ >>351
細かい話をするとb自体は関数式であって関数リテラルというのはbの右辺を指す用語
aとbの違いについてはこのへんを参照のこと
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/function
あと個人的な感覚としては返り値の有無で区別をするのはナンセンスだと思う そんな自分のウンチク言ってないで質問に答えてやればいいのに なんで上から目線で「質問に答えてやればいいのに」といえるのだろう? >>360
それは上から目線である理由になってないね
>>358が聞きたいのはそっちだろう 上から目線を感じてしまうのはあなたが小さい人だからよ 356はケチつけられても仕方ない
回答もせず、どうでもいい知識自慢、「このへんを参照のこと」なんて上から目線、自己主張
362の通り気にしすぎ >>364が気にし過ぎでフフッてなる
なるほど同レベルだね 以前はスコープの問題でfunction expression派のライブラリが数多くあった
strict modeができてからはfunction declaration派が増えたように思う MathJaxってVer3になって、レンダリングされた文字列を範囲選択出来なくなった? こんにちは。
どなたか教えていただけませんか。
下記のようなコードを書いたのですが、
div部分が1つなら問題ないのですが、複数になると2つ目以降は反映されません。
そこでループにしないといけないのかな?と思うのですが知識が未熟でどうすればいいのか全くわかりません。
どなたかどうすればいいか教えて頂けませんでしょうか。
よろしくお願いします。
// HTML
<div class="fullimg"><img src="./img1.jpg" height="1000" width="1000"></div>
<div class="fullimg"><img src="./img2.jpg" height="500" width="500"></div>
// script
let imgd = document.querySelector("img");
let result = imgd.getAttribute("src");
let hresult = imgd.getAttribute("height");
let wresult = imgd.getAttribute("width");
const div = document.getElementsByClassName("fullimg");
div[0].innerHTML = '<label for="' + result + '"><img src="' + result + '" height="' + hresult + '" width="' + wresult + '"></label>'; ループ以前にlabelのfor属性は関連するフォーム要素のIDを指定するものなので生成しようとしてるhtml自体に問題があるよ では再度サンプルコードを書いておきます。
// HTML
<div class="fullimg"><img src="./img1.jpg" height="1000" width="1000"></div>
<div class="fullimg"><img src="./img2.jpg" height="500" width="500"></div>
// script
let imgd = document.querySelector("img");
let result = imgd.getAttribute("src");
let hresult = imgd.getAttribute("height");
let wresult = imgd.getAttribute("width");
const div = document.getElementsByClassName("fullimg");
div[0].innerHTML = '<img src="' + result + '" height="' + hresult + '" width="' + wresult '">';
こちらでどうぞよろしくお願いします。 >>372
せめてループに挑戦してるけどうまく動かないから助けてってとこまではたどり着いてほしい気がするなぁ
初心者向けのループのレクチャーなんていくらでも見つかるわけだし >>375
どこかから拾ったサンプルコードの修正依頼で自分は全く知識がないのだろう これで音信不通になるようではな
諦めたか他所へマルチしに行ったか これは、取得した値をそのまま設定しているだけだから、何も変わらない
jQuery なら、
// fullimg クラスの付いたdiv の、直下のimg
$( 'div.fullimg > img' ).each( function ( index, elem ) {
jQ_this = $( this )
const src = jQ_this.attr( 'src' ) // 取得
const height = jQ_this.attr( 'height' )
const width = jQ_this.attr( 'width' )
console.log( `${ index }: ${ src }, h: ${ height }, w: ${ width }` )
jQ_this.attr( 'src', src ) // 設定
jQ_this.attr( 'height', height )
jQ_this.attr( 'width', width )
} )
ログ出力
0: ./img1.jpg, h: 1000, w: 1000
1: ./img2.jpg, h: 500, w: 500 【環境】VS Code
バージョン: 1.77.0
Electron: 19.1.11
Chromium: 102.0.5005.196
Node.js: 16.14.2
V8: 10.2.154.26-electron.0
OS: Linux x64 5.4.0-42-generic
【何をしたのか】イベントリスナー内でevent.target.valueを参照した。
【エラーメッセージ】プロパティ 'value' は型 'EventTarget' に存在しません。ts(2339)
【サンプルコード】
(() => {
"use strict";
const fruit = document.querySelector('select');
if (null === fruit) { return; }
fruit.addEventListener('change', (event) => {
if (null === event.target) { return; }
console.log(event.target.value);
});
})();
fruit === event.targetを実行するとtrueが返ったので、event.target.valueをfruit.valueに書き換えたところエラーが消えた。
イベントを扱うサンプルコードでは大抵event.target.valueが利用されているが、HTMLSelectElement.valueで置換した場合に何か落とし穴はありますか。 >>380
エラーが消えたからヨシ!は好ましくない
まずはts(2339)で検索してみよう >>381
エディタ上でts(2339)が出ていてもブラウザ上での実行は問題なくできます。
キャストするとts(2339)が消えますが、「型アサーション式は TypeScript ファイルでのみ使用できます。ts(8016)」が発生します。
ブラウザで実行すると、「Uncaught SyntaxError: Unexpected identifier 'as' (at hoge.html:24:35)」が発生します。(TypeScriptの構文なので当然ですが……)
fruit === event.target;はtrueなので置き換えたのですが、トラップや問題はありますか。
(エディタ上のts(2339)も消えるし実行もできるので、落とし穴がなければこれで行きたいな、と) >>382
そもそもTypeScriptを書こうとしてるわけじゃないのになんでtsエラーが出てるの?ってこと
vscode右下の言語モードがTypeScriptになってるんじゃないの? >>383
なってないです。拡張機能も無効です。
i.imgur.com/TE6gwcY.jpg >>384
うちではTSでは出るけどJSでは出ない
https://i.imgur.com/TJimdvc.png
https://i.imgur.com/kj2oMNk.png
おそらく何かvscode側の問題だろう
で、エディタの問題ならなおさらfruit.valueで解決とするのは悪手 >>384
わかった、vscodeの設定に↓があるんじゃない?
"js/ts.implicitProjectConfig.checkJs": true
これ追加したらうちでもJSでエラー出た >>385 >>380
原因が判明しました。"js/ts.implicitProjectConfig.checkJs"がtrueでした。
型のチェックはしたいので、event.target.valueの上に@ts-ignoreを書いて解決します。
ありがとうございました。 >>386
まさにそうでした。ありがとうございました。 jQuery では、event.target.value でも、正常に動く
<div id="btn-wrap">
<button class="BtnA BtnAll" value="1">A-1</button>
<button class="BtnA BtnAll" value="2">A-2</button>
<button class="BtnB BtnAll" value="3">B-3</button>
</div>
<div id="btn-wrap-2">
<button class="BtnC BtnAll" value="11">C-11</button>
</div>
$( function ( ) {
// 外側・親に、イベントを付けて、親で、子のイベントをキャッチする
$( '#btn-wrap' ).on( 'click', function ( event ) {
const value = $( event.target ).prop( 'value' )
console.log( value )
alert( value )
} );
$( '#btn-wrap-2' ).on( 'click', function ( event ) {
console.log( event.target.value )
alert( event.target.value )
});
} ); >>387
@ts-ignoreもなんか負けたみたいでいやだけども調べてみてもいい解決策はなさそう
致し方なしかな
>>389
正常に動くかどうかの話はしてないよ
よく読もう fruitがHTMLSelectElementなのは確定してるから
event.currentTargetがHTMLSelectElementであることは推定できそうだな
event.target じゃなくて event.currentTarget にしたらどうなるかね >>387
型チェック入れるとか
if (null === event.target || !(event.target instanceof HTMLSelectElement)) { return; }
キャストするとか
console.log(/** @type {HTMLSelectElement} */ (event.target).value); >>392
そのへん少し試したけどうまくいかなくて諦めてた
致し方なしとか言う前にもう少し手を尽くすべきだった
反省 >>391
currentTargetもts(2339)が発生します
>>392
元々、nullチェックは'event.target' は 'null' の可能性があります。ts(18047)のエラーを消すために入れていたのですが、
条件を!(event.target instanceof HTMLSelectElement)に書き換えてもts(18047)とts(2339)は発生しないので、解決しました。
JSDocコメントでのキャストは気づきませんでした、こちらが適している場面があればこちらも利用していきます。ありがとうございました。
>>390 >>393
そうなんです、@ts-ignoreを使用している行で他のエラーが出た時に気づけなくなるので、あまり使用したくないです。
遅い時間までお付き合いいただき、ありがとうございました。
ところで、event.targetの代わりにfruitを使用すべきではない明確な理由はないが、event.targetを使用するのが(通常|普通|無難)である。ということで合っていますか。 1つのイベントハンドラが複数の要素に対して設定されることは一般的で、その場合はevent.targetを使うことになる
今回のケースはそうでないにしても、可搬性や拡張性を考えれば常にevent.targetを使用しておくという判断は妥当だろう
あと処理結果は同じでも、イベントの起こった要素に対して処理をする、という意図をコードに残す意味もある
いずれにしろ現時点のそのコードだけを考えるならお好きなように >>395
確かに以下のような場合にはEvent.targetを使う必要があるし、「意図をコードに残す」にとても合点がいきました。
<button data-x="1">btn1</button>
<button data-x="2">btn2</button>
const btns = document.querySelectorAll('button');
for (const b of btns) {
b.addEventListener('click', e => console.log(e.target.dataset.x));
} >>389
に書いた
複数のコントローラーに、イベント登録する場合、
外側・親に、イベントを付けて、親側で子のイベントをキャッチする このjQuery信者は文脈や論点ってものを全く理解しないのな
jQueryでは~jQueryなら~ってただただ念仏を唱えて布教に励む様子がまさに信者 Slickで出来てSwiperでできないようなアニメーション処理って何かある? Mathjaxって配列環境でcolspan, rowspanって使えないのか?
\multicolumnというべきか JavaScript でローカルファイルを読み書きするにはどうすればいいでしょうか?
fetchという関数が使えるかと思ったんですが、blocked by CORS policy というエラーになってしまいます。 CORS(Cross-Origin Resource Sharing)制限は、
ローカルPC 上に、何かのサーバーを立てて、そこから配信すれば良い
VSCode の拡張機能、open in browser では、
file:/// から始まるローカルファイル・アクセスだから、CORS制限あり
file:///C:/Users/Owner/Documents/test.htm
一方、Live Server では、サーバーを立てているから、CORSにならない
http://127.0.0.1:5500/test.htm
同様に、コマンドプロンプト・PowerShell から、
1-liner で、Ruby で作られた遅いウェブサーバー、WEBrick を起動すると、
ruby -run -e httpd . -p 8080
これも、サーバー経由だから、CORSにならない
http://localhost:8080/test.htm
JavaScriptで電卓を作るよ。
JavaScript + HTML + CSS で電卓やホームページを作るのが今の目標です。 マイナーな質問
XyJaxで、一括して文字色を変える方法教えてくれ
\color{red}を使っても、その箇所だけしか変更できない。
\xymatrix環境内全部の文字色を変えたい こんにちは。
誰か教えてください。
<style>
.def { color: red;}
</style>
<div>
<p class="abc">aaa</p>
</div>
<div>
<p class="abc">bbb</p>
</div>
<script>
dif = document.querySelectorAll('.abc');
dif.forEach(element => document.querySelector("div").classList.add("def"));
</script>
このようなコードですが、実行すると1つめのaaaを囲ってるdivにしかclassが追加されません。
条件にあるすべてのdivに追加するにはどうすればいいのでしょうか? >>408
document.querySelectorAll('.abc').forEach(element => element.closest("div").classList.add('def')); >>409
レスありがとうございます。
closestなんてものがあるのですね。知りませんでした。
おかげで思うように行きました。
ありがとうございます。 >>408
これでもいけると思う
document.querySelectorAll('div:has(> .abc)').forEach(x=>x.classList.add('def')); これでもいいのかな?間になにか挟まってたらダメだけど
('div >:is(.abc)') >>411,412
こちらもありがとうございます。
大変助かります。