我认为我有范围问题。这是我的HTML(我知道是“坏”的HTML,但它来自另一个来源):
<table>
<tr>
<td>
<div><b>blablabla <span>some text</span></b></div>
</td>
</tr>
<tr>
<td>
<div><b><span>this is another text</span></b></div>
</td>
</tr>
<tr>
<td>
<div><b>blablabla <span>this is</span> <span>one more text</span></b></div>
</td>
</tr>
</table>
这是我的javascript
$(document).ready(function() {
// delete all span in b
$('b span').contents().unwrap();
// delete "blablabla"
$("b:contains('blablabla')").html(function(i, text) {
return text.replace(/blablabla/g, '');
});
$("b").each(function() {
var bcont = $(this).text();
var stxts = [ "this is another text", "this should not match" ];
$.each(stxts, function(i, val) {
alert($("b").text());
if ( bcont == val) {
$(this).closest("tr").css({"background" : "green"});
}
});
});
});
如果b标签内的文本与某个stxts数组值匹配,我想更改包含匹配的b标签的tr标签的背景颜色。 我究竟做错了什么? 在if语句条件中,我尝试了==比较和===。 在if语句中我尝试用$(“b”)替换$(this),没有结果。而不是$ .each我尝试了一个没有运气的for循环。 我确定我在“另一个函数内部的函数”中做错了。 谢谢你的时间。
答案 0 :(得分:1)
第二个libs/armeabi-v7a/libMyOpencvLibs.so
$(this)
您希望.each()
代表第一个$(this)
,但由于您在第二个.each()
中使用$(this)
,因此代表该.each()
。
在第一个$(this)
内设置.each()
的变量,例如:var $this = $(this)
并使用$($this).closest("tr").css({"background-color": "green"});
$(document).ready(function() {
// delete all span in b
$('b span').contents().unwrap();
// delete "blablabla"
$("b:contains('blablabla')").html(function(i, text) {
return text.replace(/blablabla/g, '');
});
$("b").each(function() {
var $this = $(this)
var bcont = $(this).text().trim();
var stxts = ["this is another text", "this should not match"];
$.each(stxts, function(i, val) {
if (bcont == val) {
$($this).closest("tr").css({
"background": "green"
});
}
});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<td>
<div><b>blablabla <span>some text</span></b></div>
</td>
</tr>
<tr>
<td>
<div><b><span>this is another text</span></b></div>
</td>
</tr>
<tr>
<td>
<div><b>blablabla <span>this is</span> <span>one more text</span></b></div>
</td>
</tr>
</table>