2016-09-26 279 views
0

我需要檢查div A的數據值是否包含div B的數據值,如果是這樣,請將類應用於div B,請注意有很多div B's。js indexOf不能使用數字

HTML: 
<div class="a" data-num="1,2,3,4,5">div A</div> 
<div class="b" data-num="3">div B</div> 
<div class="b" data-num="6">div B</div> 
<div class="b" data-num="1">div B</div> 

JQUERY: 
$('div.b').each(function(){ 
var a_num = $('div.a').data('num'); 
var b_num = $(this).data('num'); 

if ($(a_num).indexOf(b_num)) { 
    $(this).addClass('special'); 
} 
}); 

我認爲上述可行,但事實並非如此。幫幫我?謝謝。

回答

1

幾個問題......這首先是indexOf()總是需要,因爲0被比作-1是有效的索引,但也falsy如果你的DIV使用數組的值

你的概念是可行的。否則,您只是在進行字符串比較,並且10,11,12將在使用檢查時全部返回有效索引1

最後不要將數據包裝在$()中。它你可以做

<div class="a" data-num="[1,2,3,4,5]">div A</div> 

或使用當前格式,並使用split()

var a_num = $('div.a').data('num').split(','); 

而對於這兩種情況下,你必須使用比較-1

if (a_num.indexOf(b_num) >-1) 
轉換成數組不是dom相關

0

你需要在這裏創建自己的功能原因indexOf將不起作用。

function isFound(arr,num){ 
 
    fnd = false 
 
    for (n=0; n<arr.length; n++){ 
 
    var bb = parseInt(num); 
 
    var aa = arr[n]; 
 
    aa = parseInt(aa); 
 
    if (aa==bb) fnd=true; 
 
    } 
 
    return fnd; 
 
} 
 
$('div.b').each(function(){ 
 
    var aa = $('.a').data('num').split(','); 
 
    var bb = $(this).data('num'); 
 
    var tst = isFound(aa, bb); 
 
    
 
    if (tst) { 
 
    $(this).addClass('special'); 
 
    } 
 
});
.special{color:red;font-weight:bold;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div class="a" data-num="1,2,3,4,5">div A</div> 
 
<div class="b" data-num="3">div B</div> 
 
<div class="b" data-num="6">div B</div> 
 
<div class="b" data-num="5">div B</div>