0

私はこのマークアップを持っています:

<div class="click">click</div>
<div id="wrapper">
<div class="container">
<div data-attrfirst='type1'><span data-attrsecond='type2'>must be red</span></div>
</div>
</div>

.container次のすべてのsを選択したい:
1. の中にある#wrapper;
2.data-attrfirst='type1'要素を含み、要素を含むdata-attrsecond='type2'
私の要件:
1. 「#wrapper」、「type1」、「type2」の値は変数として保持する必要があります。
2. これをすべて何らかのタグ内で見つける必要があります (この場合は を選択しますbody)。

私はこれを試しました(アスタリスクは削除される可能性がありますが、違いはありません):

<script>
    $(document).ready(function () {
        $('.click').click(function () {
            var myid = '#wrapper';
            var attrfirst = 'type1';
            var attrsecond = 'type2';
            var elem = $('*[data-attrfirst=' + attrfirst + ']').has('*[data-attrsecond=' + attrsecond + ']');
            $('body').find(myid + ' .container').each(function (i) {
                if ($(this).has('*[data-attrfirst=' + attrfirst + '] *[data-attrsecond=' + attrsecond + ']')) {
                    $(this).css('color', 'red')
                }
            });

            $('body').find(myid + ' .container').each(function (i) {
                if ($(this).has(elem)) {
                    $(this).css('color', 'red')
                }
            });
            $('body').find(myid + ' .container').filter(function (i) {
                return $('*[data-attrfirst=' + attrfirst + '] *[data-attrsecond=' + attrsecond + ']', this).length >= 1
            }).css('color', 'red')
        });
    });
</script>

どこが間違っていますか?そして、私はJqueryのドキュメントから理解していません.has.Jqueryオブジェクトを受け入れますか?

4

3 に答える 3

1

あなたの質問は、を見つけたいと言っている#containerので、これを使用してください:

$('body #wrapper .container:has([data-attrfirst="type1"] [data-attrsecond="type2"])');

または、少し混乱を避けるために、逆方向に作業することもできます。

$('[data-attrfirst="type1"] [data-attrsecond="type2"]')
     .closest('body #wrapper .container');

data-attrsecond="type2"ただし、コードから、実際には最後の要素を見つけたいようです。その場合、これを使用します。

$('body #wrapper .container [data-attrfirst="type1"] [data-attrsecond="type2"]');
于 2012-11-02T02:57:39.747 に答える
0

検索しようとして.containerいますが、「コンテナ」をクラス属性ではなく ID 属性として定義しています。#container探している要素を返す必要があります。

于 2012-11-02T03:00:47.570 に答える
0

これはうまくいきます:

attrfirst = 'type1';
attrsecond = 'type2';
thetag = 'body';

$(thetag + " #wrapper [data-attrfirst='" + attrfirst + "'] [data-attrsecond='" + attrsecond + "']").css('color', 'red')
于 2012-11-02T03:02:28.487 に答える