2016-06-28 81 views
1

我想檢查一個TD是否包含某個字符串,但前提是該字符串不在SPAN內。TD:包含字符串但不在一個範圍內元素

比方說,我要檢查所有TD爲「寶」:

<td> TREASURE <span>Water</span> </td> -> YES 
<td> Water <span>TREASURE</span> </td> -> NO 
<td> TREASURE </td> -> YES 
<td> <div>TREASURE</div> <span>Water</span> </td> -> YES 

到目前爲止,我已經嘗試不同的事情,從搜索中排除跨度元素,但我沒有成功。

$('table tr td:Contains("TREASURE")').not('span').each(function() { 
    $(this).addClass('found'); 
}); 

非常感謝! :)

編輯:

另外下面的情況也應努力:

<td> TREASURE <span>TREASURE</span> </td> -> YES 

回答

2

您可以:has()僞使用:not()僞類選擇器(或not()法)類選擇器。

$('table tr td:contains(TREASURE):not(:has(span:contains(TREASURE)))').addClass('found'); 
 

 
// or 
 

 
$('table tr td:contains(TREASURE)').not(':has(span:contains(TREASURE))').addClass('found');
.found { 
 
    color: red 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<table> 
 
    <tr> 
 
    <td>TREASURE <span>Water</span> 
 
    </td> 
 
    <td>Water <span>TREASURE</span> 
 
    </td> 
 
    <td>TREASURE</td> 
 
    <td> 
 
     <div>TREASURE</div> <span>Water</span> 
 
    </td> 
 
    </tr> 
 
</table>

UPDATE: 如果文本包含在這兩個地方,然後用 filter()方法。實際做的是克隆 td,並在應用 :contains選擇器後從克隆對象中刪除跨度元素。

$('table tr td').filter(function() { 
 
    return $(this) 
 
    .clone() // clone the element 
 
    .find('span') // get all span inside cloned element 
 
    .remove() // remove the spans 
 
    .end() // back to cloned element 
 
    .is(':contains(TREASURE)'); // check the cloned element contains text 
 
}).addClass('found');
.found { 
 
    color: red 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<table> 
 
    <tr> 
 
    <td>TREASURE <span>Water</span> 
 
    </td> 
 
    <td>Water <span>TREASURE</span> 
 
    </td> 
 
    <td>TREASURE</td> 
 
    <td> 
 
     <div>TREASURE</div> <span>Water</span> 
 
    </td> 
 
    <td> 
 
     <td>TREASURE <span>TREASURE</span> 
 
     </td> 
 
    </tr> 
 
</table>

+0

感謝 - 這是非常有用的,但有一個例外,它不工作: '​​TREASURE TREASURE' - 因此,當有兩個寶物,一個元素中和一個「空白」,它也應該觸發。什麼方式來做到這一點?非常感謝! – user1658080

+0

@ user1658080:已更新 –

+0

非常感謝 - 真的很棒!剛學過濾器:) – user1658080

相關問題