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

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

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

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

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

Q&A

解決済

4回答

1479閲覧

class名とid名を一覧化したい

oimo014

総合スコア103

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

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

0グッド

1クリップ

投稿2017/12/27 05:31

編集2017/12/27 05:47

直接プログラミングに関わる質問ではなくて申し訳ございません。

###前提・実現したいこと
サイト、ディレクトリ、ページ(HTML)のいずれかの単位で使用しているclass名とid名を抽出し、
テキストファイルやエクセルファイルなどで保存したいと思っています。
最終的には複数のページで使用しているclass名、id名すべてをドキュメントとして残したいです。

###試したこと
以下のサイトを使用してページ単位で使用しているclass名、id名はあらかた抽出できたのですが、
idとclass両方が指定されている要素は、class部分が無視されてしまいました。
http://extractcss.com/

何かいい方法やツールをご存知の方がいらっしゃいましたら、ご教示いただけますと大変助かります。
よろしくお願いいたします。

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

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

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

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

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

yambejp

2017/12/27 05:36

自ページ内に組み込んでいいなら、DOMとして認識できるので比較的カンタンにいけそうな気がします。別のページを解析したりテキストとしてコピペしてチェックする場合は文字列の評価になるので多少処理が面倒です。具体的などういうチェッカが希望でしょうか?
oimo014

2017/12/27 05:43

コメントいただきありがとうございます。 最終的には複数のページで使用しているclass名、id名すべてをドキュメントとして残したいため、後者に当たるかと思います。 質問にも追記してきます。
yambejp

2017/12/27 05:49

文字列からidやクラスを抜き出すのでしたらやはりjavascriptで正規表現をご利用になることだと思います。サーバーサイドの技術を使っていいなら言語に寄ってHTMLの解析ツールは用意されていたりライブラリが公開されていたりするでしょう。またクライアントのローカルで動く解析ツールいくつか公開されているようです
x_x

2018/01/02 08:04

動的にidやclassがつけられたりすると思うのですが、考えなくてもいいのでしょうか?
guest

回答4

0

単に列挙してはダメなのでしょうか?

JavaScript

1document.querySelectorAll('[class]').forEach(e=>console.log(e.className)); 2document.querySelectorAll('[id]').forEach(e=>console.log(e.id));

投稿2018/01/02 08:21

x_x

総合スコア13749

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

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

退会済みユーザー

退会済みユーザー

2018/01/02 10:20

どうせなら、e.classNameよりe.classListを使ったほうがいいかと。
x_x

2018/01/02 12:05

重複をなくしたほうがいいかなとかコピーしやすいようにウインドウ開いたほうがいいのかとかブックマークレットにしたほうがいいのかとか考えていろいろ書きなおしていたのですが、要件もはっきりしないのに凝ってもなーと思い直して今の形になってしまいました><
guest

0

ベストアンサー

正規表現

ローカルにファイルがある前提ですが、grepで検索してみてはいかがでしょうか。
'リモートにしかファイルが存在しないのなら、Webサイトを丸ごとダウンロードする必要があります。)

plain

1id\s*=\s*(?:"[^"]+"|'[^']+'|[^"'=<>\s]+) 2class\s*=\s*(?:"[^"]+"|'[^']+'|[^"'=<>\s]+)

抽出したログを正規表現の一括置換、Excelなどで整形します。

DOM

ページ単位なら、x_x さんが回答されているようにJavaScriptを使うのが楽です。
以下、未検証ですが、コードの流れを追うのに使って下さい。

JavaScript

1var idList = Array.prototype.map.call(document.querySelectorAll('[id]'), element => element.id); 2 3var classList = Array.prototype.reduce.call(document.querySelectorAll('[class]'), (classList, element) => (Array.prototype.push.apply(classList, element.classList), classList), []);

複数ページに対応するには、ページ全体のa要素を抽出し、見えないiframe要素を構築して、対象のページのDOMを参照し、上記コードと同じ実装を再帰的に繰り返します。
内部リンク/外部リンクの区別は location.host と比較すれば、確認出来るでしょう。

この方法の良いところはURIとid/class一覧の対応関係を確実に保証出来ることです。
正規表現の場合は実ファイルの場所との対応関係になりますが、mod_rewiteなどを使ってURIを改変していると、URIとの対応関係を知るためにもう一手間必要になります。

Re: oimo014 さん

投稿2018/01/02 13:04

編集2018/01/03 03:50
think49

総合スコア18164

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

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

oimo014

2018/01/09 10:27

返信が遅くなり申し訳ございません。ご教示いただきました、正規表現を用いたgrep検索でやりたいことにかなり近づくことができました。今回はこちらの方法で乗り切れそうです。ご丁寧にご回答いただきましてありがとうございました。
guest

0

スクレイピングツール使うのが一番手っ取り早く安全にできるかと思います。
個人的にはJavaScriptで同処理を行うのであれば、この辺がおすすめです。
puppeteer

投稿2017/12/27 07:30

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

正規表現の置換でごり押し置換してexcelファイルに貼るとかですかね?

検索文字列:(.?)( id=(.?)(\s|>))
置換文字列:id=\3\r\n

ゴミが残るかもしれませんがあとはなんとかできるかと

投稿2017/12/27 05:47

sousuke

総合スコア3828

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問