6

jQueryには、ツリー内で最も近い一致する祖先を返す「最も近い」があります。Dartに相当するものはありますか?次の脆弱性を軽減したいと思います。

e.target.parent.parent.nextElementSibling.classes.toggle('hide');

おそらく次のようなもの:

e.target.closest('div').nextElementSibling.classes.toggle('hide');
4

1 に答える 1

4

私の知る限り、組み込み関数はありません。しかし、何かをコーディングするのはとても簡単です。

以下findClosestAncestor()に定義されている関数は、指定された祖先タグが与えられた要素の最も近い祖先を見つけます。

<!DOCTYPE html>

<html>
  <head>
    <title>ancestor</title>
  </head>

  <body>   
    <div id='outer'>
      <div id='inner'>
        <p></p>
      </div>
    </div>

    <script type="application/dart">
      import 'dart:html';

      Element findClosestAncestor(element, ancestorTagName) {
        Element parent = element.parent;
        while (parent.tagName.toLowerCase() != ancestorTagName.toLowerCase()) {
          parent = parent.parent;
          if (parent == null) {
            // Throw, or find some other way to handle the tagName not being found.
            throw '$ancestorTagName not found';
          }
        }
        return parent;
      }

      void main() {
        ParagraphElement p = query('p');
        Element parent = findClosestAncestor(p, 'div');
        print(parent.id); // 'inner'
      }    
    </script>

    <script src="packages/browser/dart.js"></script>
  </body>
</html>
于 2013-05-08T20:09:50.193 に答える