0

次のコードがあります。

HTML

<div id="Test" class="test">test</div>
<div id="Test1" class="test">test</div>
<div data-id="Test2" class="test">test</div>
<br />
<div id="result1"></div>
<div id="result2"></div>

jQuery

var result1 = 'Result1:',
    result2 = 'Result2:';

$('.test').each(function () {
    var test = $(this),
        testId1 = (typeof this.id !== "undefined" ? this.id : test.data('id')),
        testId2 = (typeof this.id !== "undefined" ? this.id : '');

    if (testId2 == '') {
        testId2 = test.data('id');
    }

    result1 += testId1 + '.';
    result2 += testId2 + '.';
});

$('#result1').html(result1);
$('#result2').html(result2);

両方の結果 div について、コンテンツResult1:Test.Test1.Test2.Result2:Test.Test1.Test2.

しかし、最初の結果の div の内容はResult1:Test.Test1...

どうしてこれなの?

フィドルの例

4

6 に答える 6

2

要素に ID がない場合、element.id は未定義ではなく空の文字列を返します。

修正して簡素化できます:

 var testId1 = this.id ? this.id : test.data('id');
于 2013-09-12T15:30:50.270 に答える
1

問題は、id属性がなくても 3 番目の要素にあります。空の文字列ではthis.idありません。undefinedそのため、3 番目の要素でtest1は空の文字列が値として取得されますがtest2、次のif条件では値がidデータ値で更新されます。

id考えられる解決策の 1 つは、プロパティが定義されているかどうかを確認する代わりに、プロパティの長さをテストすることです。

var result1 = 'Result1:',
    result2 = 'Result2:';
$('.test').each(function () {
    var test = $(this),
        testId1 = ($.trim(this.id || '').length ? this.id : test.data('id')),
        testId2 = (this.id !== undefined ? this.id : '');

    if (testId2 == '') {
        testId2 = test.data('id');
    }

    result1 += testId1 + '.';
    result2 += testId2 + '.';
});

$('#result1').html(result1);
$('#result2').html(result2);

デモ:フィドル

于 2013-09-12T15:25:58.930 に答える
1

問題は、値が設定されていない場合でもであるためtypeof this.idです。string

このため、条件typeof this.id !== "undefined"は常に true であり、両方のフィールドは常にthis.idas 値のみを持ちます。

以下の方法で試してみてください。

var test = $(this),
    testId1 = (this.id !== "" ? this.id : test.data('id')),
    testId2 = (this.id !== "" ? this.id : '');
于 2013-09-12T15:30:03.617 に答える
0

これを試して、

var result1 = 'Result1:',
    result2 = 'Result2:';
$('.test').each(function () {
    var test = $(this),
        testId1 = (test.attr('id')!=undefined ? test.attr('id') : test.data('id')),
        testId2 = (test.attr('id')!=undefined ? test.attr('id') : '');
    if (testId2 == '') {
        testId2 = test.data('id');
    }
    result1 += testId1 + '.';
    result2 += testId2 + '.';
});

$('#result1').html(result1);
$('#result2').html(result2);

フィドル http://jsfiddle.net/WaJ5n/3/

于 2013-09-12T15:27:39.653 に答える
-2

あなたの間違いはhtmlコードです.id="Test2"にはdata-id="Test2"ではなくidタグが必要です

<div id="Test" class="test">test</div>
<div id="Test1" class="test">test</div>
<div **id="Test2"** class="test">test</div>
<br />
<div id="result1"></div>
<div id="result2"></div>

これにより、探している出力が得られます。

于 2013-09-12T15:27:07.147 に答える