JavaScript 访问列表中的锚点
JavaScript access anchor in list
目前,我的代码遍历 <td>
单元格中的每个 <li>
,并将 class 应用于 <li>
。我现在在每个 <li>
之间添加了 <a>
标签,并且在访问 <a>
时遇到问题。我基本上想为每个 <a>
标签添加一个 class 而不是 <li>
。
HTML
<td style='padding: 0;' bgcolor='#FAFAFA'>
<ul class='doctorList'>
<li id='1'><a style='text-decoration: none;'>Curly</a></li>
<li id='2'>Larry</li>
<li id='3'>Moe</li>
</ul>
</td>
JavaScript
function mapBookedAppointmentsToCalendar()
{
var bookedAppointmentsArray = <?php echo json_encode($mappingIdArray) ?>;
var table = document.getElementById("tbl_calendar");
for (var i = 0, row; row = table.rows[i]; i++) {
for (var j = 0, col; col = row.cells[j]; j++) {
var li = col.querySelectorAll("li");
for (var k = 0; k < li.length; k++) {
for (var a = 0; a < bookedAppointmentsArray.length; a++)
{
if (li[k].id == bookedAppointmentsArray[a])
{
li[k].className = "colorRed booked";
break;
} else
{
li[k].className = "colorGreen";
}
}
}
}
}
}
您不需要使用 table
来访问它。请记住 getElementsByClassName
方法:
u = document.getElementsByClassName('doctorList');
for (i = 0; i < u.length; i++){
l = u[i].getElementsByTagName('li');
for (j = 0; j < l.length; j++){
l[j].className = 'red';
}
}
检查这个 demo
您是否尝试过使用查询选择器找到那些 <a>
?
var li = col.querySelectorAll("#tbl_calendar li a");
for (var k = 0; k < li.length; k++) {
for (var a = 0; a < bookedAppointmentsArray.length; a++)
{
if (li[k].id == bookedAppointmentsArray[a])
{
li[k].className = "colorRed booked";
break;
} else
{
li[k].className = "colorGreen";
}
}
}
如果你不需要旧浏览器支持,你可以这样做:
var ul = document.querySelector('ul.doctorList');
var li = ul.querySelectorAll('li');
// convert the node list to an array
li = [].slice.call(li);
li.forEach(function(element) {
if (element.id === '1') {
var a = element.querySelector('a');
a.className = 'red';
}
});
var ul = document.querySelector('ul.doctorList');
var li = ul.querySelectorAll('li');
// convert the node list to an array
li = [].slice.call(li);
li.forEach(function(element) {
if (element.id === '1') {
var a = element.querySelector('a');
a.className = 'red';
}
});
.red {
color: red;
}
<td style='padding: 0;' bgcolor='#FAFAFA'>
<ul class='doctorList'>
<li id='1'><a style='text-decoration: none;'>Curly</a></li>
<li id='2'>Larry</li>
<li id='3'><a style='text-decoration: none;'>Moe</a></li>
</ul>
</td>
目前,我的代码遍历 <td>
单元格中的每个 <li>
,并将 class 应用于 <li>
。我现在在每个 <li>
之间添加了 <a>
标签,并且在访问 <a>
时遇到问题。我基本上想为每个 <a>
标签添加一个 class 而不是 <li>
。
HTML
<td style='padding: 0;' bgcolor='#FAFAFA'>
<ul class='doctorList'>
<li id='1'><a style='text-decoration: none;'>Curly</a></li>
<li id='2'>Larry</li>
<li id='3'>Moe</li>
</ul>
</td>
JavaScript
function mapBookedAppointmentsToCalendar()
{
var bookedAppointmentsArray = <?php echo json_encode($mappingIdArray) ?>;
var table = document.getElementById("tbl_calendar");
for (var i = 0, row; row = table.rows[i]; i++) {
for (var j = 0, col; col = row.cells[j]; j++) {
var li = col.querySelectorAll("li");
for (var k = 0; k < li.length; k++) {
for (var a = 0; a < bookedAppointmentsArray.length; a++)
{
if (li[k].id == bookedAppointmentsArray[a])
{
li[k].className = "colorRed booked";
break;
} else
{
li[k].className = "colorGreen";
}
}
}
}
}
}
您不需要使用 table
来访问它。请记住 getElementsByClassName
方法:
u = document.getElementsByClassName('doctorList');
for (i = 0; i < u.length; i++){
l = u[i].getElementsByTagName('li');
for (j = 0; j < l.length; j++){
l[j].className = 'red';
}
}
检查这个 demo
您是否尝试过使用查询选择器找到那些 <a>
?
var li = col.querySelectorAll("#tbl_calendar li a");
for (var k = 0; k < li.length; k++) {
for (var a = 0; a < bookedAppointmentsArray.length; a++)
{
if (li[k].id == bookedAppointmentsArray[a])
{
li[k].className = "colorRed booked";
break;
} else
{
li[k].className = "colorGreen";
}
}
}
如果你不需要旧浏览器支持,你可以这样做:
var ul = document.querySelector('ul.doctorList');
var li = ul.querySelectorAll('li');
// convert the node list to an array
li = [].slice.call(li);
li.forEach(function(element) {
if (element.id === '1') {
var a = element.querySelector('a');
a.className = 'red';
}
});
var ul = document.querySelector('ul.doctorList');
var li = ul.querySelectorAll('li');
// convert the node list to an array
li = [].slice.call(li);
li.forEach(function(element) {
if (element.id === '1') {
var a = element.querySelector('a');
a.className = 'red';
}
});
.red {
color: red;
}
<td style='padding: 0;' bgcolor='#FAFAFA'>
<ul class='doctorList'>
<li id='1'><a style='text-decoration: none;'>Curly</a></li>
<li id='2'>Larry</li>
<li id='3'><a style='text-decoration: none;'>Moe</a></li>
</ul>
</td>