「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > DOM 要素の正確な CSS パスを生成するにはどうすればよいですか?

DOM 要素の正確な CSS パスを生成するにはどうすればよいですか?

2024 年 11 月 3 日に公開
ブラウズ:433

How Can I Generate Precise CSS Paths for DOM Elements?

精度を高めた DOM 要素からの CSS パスの取得

提供された関数は、指定された DOM 要素の CSS パスの生成を試みます。ただし、その出力には具体性が欠けており、兄弟内の要素の位置を捕捉できません。これに対処するには、より洗練されたアプローチが必要です。

改良された CSS パス関数

以下に示す拡張機能は、元の制限に対処します:

var cssPath = function(el) {
    if (!(el instanceof Element)) 
        return;
    var path = [];
    while (el.nodeType === Node.ELEMENT_NODE) {
        var selector = el.nodeName.toLowerCase();
        if (el.id) {
            selector  = '#'   el.id;
            path.unshift(selector);
            break;
        } else {
            var sib = el, nth = 1;
            while (sib = sib.previousElementSibling) {
                if (sib.nodeName.toLowerCase() == selector)
                   nth  ;
            }
            if (nth != 1)
                selector  = ":nth-of-type(" nth ")";
        }
        path.unshift(selector);
        el = el.parentNode;
    }
    return path.join(" > ");
}

拡張機能と利点:

  • ID ベースの最適化: この関数は、ID 属性と一致する要素を優先し、検索を停止します。 ID が見つかったら。これにより、ユニークで効率的な CSS セレクターが保証されます。
  • Nth-of-Type セレクター: nth-of-type セレクターを活用することで、関数は兄弟間の要素の位置を識別し、より適切な CSS セレクターを提供します。特異性と可読性。
  • すべての要素ノードに適しています: この関数はすべての要素ノード (テキスト ノードを除く) を正しく処理し、DOM ツリー内での位置を正確にキャプチャします。

使用例:

この改良された機能を利用すると、特定の要素のより正確な CSS パスを取得できるようになりました:

console.log(cssPath(document.getElementsByTagName('a')[123]));
// Output: "html > body > div#div-id > div.site:nth-child(1) > div.clearfix > ul.choices > li:nth-child(5)"
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3