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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

1540閲覧

外部ファイルを使用する場合の該当する箇所の見つけ方

SugiuraY

総合スコア317

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

2クリップ

投稿2018/02/03 09:56

自身で作成しているサイトがあるのですが、
semantic UIを使用しおり、そのaccordionを使っているのですが
accordionを開くと
下記のdisplayに自動的にブロックプロパティが付与されてしまい、これをflexプロパティにしたいと考えております。

これに影響を与えていると思われる、
semantic.js
ファイルを見る限り21711行目の
.css('display', 'block')
を無効にすれば良いのかと思ったのですが、これをコメントアウトしても
開くたびにロックプロパティが付与されてしまいます。

例えば、外部のJSファイルをカスタムしたい場合に、どの箇所が影響を与えているか解読したい場合に
このように該当箇所が容易に見つけることができません。。。

使用しているのはgoogle develooer toolなのですが、
本件の解決方法や、実務上のコツがあれば、ぜひアドバイスを頂きたく思います。

よろしくお願い申し上げます。

サイト

<div id="line_1st" style="display: block !important;" class="transition visible"> </div>

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

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

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

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

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

guest

回答2

0

ベストアンサー

調べる方法は一応あります。
ちょっとひと手間かかりますが、

js

1const line1st = document.querySelect('#line_1st'); 2const orgStyle = hoge.style; 3// スタイルオブジェクトのプロキシオブジェクトを生成 4const proxyStyle = Object.assign({}, orgStyle); 5// styleプロパティにプロキシオブジェクトをセット 6hoge.style = proxyStyle; 7 8// プロキシオブジェクトをフック 9Object.defineProperty(proxyStyle, 'display', { 10 get: _ => { 11 debugger; 12 return orgStyle.display; 13 }, 14 set: value => { 15 debugger; 16 console.log('set display', value); 17 orgStyle.display = value; 18 } 19});

といったコードを仕込み、devTools立ち上げてページをリロードすれば、displayスタイルを設定したときに止まるので、
あとはコールスタック辿ればどこで設定しているのかを調べることができます。

投稿2018/02/04 05:44

編集2018/02/04 09:27
turbgraphics200

総合スコア4267

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

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

SugiuraY

2018/02/04 08:35

コメントありがとうございます! このようなデバッギングの技術があり、またdeveloper tooに備わっていることに目から鱗で強烈に感動しております。実際にコールスタックで該当しているコードを見つけることができました。 一方で、MDNの関連サイトを見ても、このコードどのように機能しているかどうしても理解できなかったため、よければ今後の大きな財産になりそうなので、申し訳ございませんが、重ねてお尋ねさせてください。 ・const orgStyle = line1st.style; ←これはScriptのorgStyleプロパティにその要素のスタイルのエレメントを定数として格納する意味であると思います。これを退避と表現されましたが、具体的にどのような効果があるのでしょうか? ・Object.defineProperty(line1st.style, 'display', { set: val => { debugger;} }); ここの箇所が調べたのですが、解読できませんでした。。 MDNにはdefinePropertyについて以下の通り解説があります "指定されたオブジェクトに新しいプロパティを定義したり、既存のプロパティを変更したりします。戻り値は指定されたオブジェクトをそのまま返します。" また、debugger;は "debugger ステートメントは、ブレークポイントの設定のような任意の利用可能なデバッグ機能を呼び出します。デバッグ機能が利用可能ではない場合、このステートメントは効果がありません。"とあります。 set: val => { });に関する文法を見つけることができなかったので、特にここの箇所がわからないんのですが、なぜこのようなコードを組むことによって、特定の要素のdisplayプロパティが変化するタイミングで処理を止めてくれるのでしょうか、、call stackの画面を見ると処理が止まったタイミングで、確かにsetプロパティが表示されそのタイミングで影響を与えていると思われる外部ファイルの一覧とその箇所が表示されております。
turbgraphics200

2018/02/04 09:35

ちょっと回答内容に不備がありましたので修正しました。 修正前の退避の部分は無意味でした。 ただ、line1st.style.displayをフックするので、例えば Object.property(line1st.style, 'display', { get: _ => { return line1st.style.display; // ★ } }); のように書いてしまうと、無限ループに陥ってしまいます。 編集後の回答のようにプロキシオブジェクトを生成してプロキシオブジェクトをstyleプロパティに設定し、プロキシオブジェクトをフックすることで、無限ループを回避します。 あと、Object.defineProperty(Object.definePropertiesも)において、get: や set: はプロパティのgetter, setterの設定を行うということです。
SugiuraY

2018/02/04 09:42

早速、ご回答をいただき、ありがとうございます。 また、プロキシオブジェクトなど初めて見る単語がたくさんありますが、調べながら咀嚼してみます。 こんな、新しい世界を調べるのが、とても楽しいです。 ご教示をいただき、改めて深謝を申し上げます!
guest

0

おー、不思議な挙動ですね。

https://semantic-ui.com/modules/accordion.html#/settings

のanimateChildren, closeNested, collapsible, easing等を有効にさせるために勝手に操作されている様な感じがするので、オフにしてみるともしかするとやめてくれるかもしれません。

だめだったら、その下に書かれているonOpenのcallbackを使い、開いた時にflexに戻せばいいと思います。

実務上のコツ

ということで言えば、ライブラリを改造するのはやめた方が良いと思います。引き継いだ人がなんでそんな挙動になっているのか分からず、かなりいらっとすると思います。
まずはマニュアルをしっかり読み、その範囲でできることがないかを探しましょう。

ちなみに改造するなら本家にPull Requestを送るつもりでやったほうが良いと思います。
あと、基本的にGitHubにあるようなソースをビルドして作られていると思うので、本気で改造するならちゃんとまずビルドできるようにした方が良いと思います。
(ビルドできればマップが出せたりと、問題の箇所の発見も容易になります)

投稿2018/02/03 10:38

編集2018/02/03 10:41
dala00

総合スコア441

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

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

SugiuraY

2018/02/04 04:09

コメントありがとうございます。 animateChildrenでblockは解除できたのですが、他のchildrenがすべてhiddenになってしまう副作用が生じたのでダメでした。。複雑な動きの割には設定できるbehaviourの説明が淡白でお手上げです。。 divないを横並びにしたいだけなので、blockでも横並びにする他のアプローチで検討することになりそうです、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問