我试图在元素内查找数组值,然后向其添加一个CSS类。我的技术错了吗?有人可以帮我吗。
var numbers = [1, 2, 3, 7, 8, 9, 10, 16, 17, 18, 19, 20];
for (numbers < 1; numbers <= 20; numbers++) {
$('td').find(numbers).addClass('active');
}
td.active {
color: #f00;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tr>
<td>1
<td>
<td>2
<td>
<td>3
<td>
<td>4
<td>
<td>5
<td>
<td>6
<td>
<td>7
<td>
<td>8
<td>
<td>9
<td>
<td>10
<td>
<tr/>
<tr>
<td>11
<td>
<td>12
<td>
<td>13
<td>
<td>14
<td>
<td>15
<td>
<td>16
<td>
<td>17
<td>
<td>18
<td>
<td>19
<td>
<td>20
<td>
<tr/>
</table>
谢谢。
答案 0 :(得分:4)
这里有几个问题。首先,您的HTML已损坏。 td
元素需要使用</td>
正确关闭。然后<tr />
必须是</tr>
。
第二,您的for
循环语法不正确。 numbers
是对该数组的引用,因此将其用作迭代器将导致异常行为。相反,您需要定义一个整数并将其递增。然后,您可以使用该整数通过numbers
循环中的索引从for
检索值。
最后,find()
期望选择器在td
中搜索子元素。相反,您需要使用filter()
来匹配每个单元格的文本。筛选器功能需要获取单元格的文本,并使用indexOf()
来确定该值是否在数组内容之内。另请注意,使用此方法时,您根本不需要for
循环。试试这个:
var numbers = [1, 2, 3, 7, 8, 9, 10, 16, 17, 18, 19, 20];
$('td').filter(function() {
return numbers.indexOf(parseInt($(this).text(), 10)) != -1;
}).addClass('active');
td.active {
color: #f00;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
<td>10</td>
</tr>
<tr>
<td>11</td>
<td>12</td>
<td>13</td>
<td>14</td>
<td>15</td>
<td>16</td>
<td>17</td>
<td>18</td>
<td>19</td>
<td>20</td>
</tr>
</table>
答案 1 :(得分:1)
如罗里所说,请确保正确关闭所有元素。
尝试此代码。它将具有指定数字的所有元素过滤为内部html并设置css类。
var numbers = [1, 2, 3, 7, 8, 9, 10, 16, 17, 18, 19, 20];
for (var i = 0; i < numbers.length; i++) {
$('td').filter(function() {
return $(this).html() == numbers[i];
}).addClass('active');
}
如您所见,必须对数组进行迭代以获取指定的值。
答案 2 :(得分:1)
如果您像我一样喜欢微小的,可重用的功能,请按以下步骤操作:
<script>
import './styling.scss'
export default {
name: "app",
data() {
return {
items: {books:[], authors:[]}
};
},
created: function() {
this.makeAjaxCall("books.json", "get").then(res => {
this.items.books = res.books;
return res;
}),
this.makeAjaxCall("authors.json", "get").then(res => {
this.items.authors = res.authors;
return res;
})
},
},
methods: {
removeEntry:function(item) {
this.$delete(this.items.books, item.name);
},
makeAjaxCall:function(url, methodType){
var promiseObj = new Promise(function(resolve, reject){
var xhr = new XMLHttpRequest();
xhr.open(methodType, url, true);
xhr.send();
xhr.onreadystatechange = function(){
if (xhr.readyState === 4){
if (xhr.status === 200){
//alert("xhr done ok");
var response = xhr.responseText;
var respJson = JSON.parse(response);
resolve(respJson);
} else {
reject(xhr.status);
//alert("xhr failed");
}
} else {
//alert("xhr processing");
}
}
//alert("request sent succesfully");
});
return promiseObj;
}
}
};
</script>