有没有一种方法可以在javascript和vanilla JS生成的表中获取TD的值?
我有以下代码,它使用javascript数组生成HTML表:有没有一种方法可以在javascript和vanilla JS生成的表中获取TD的值?,javascript,html,html-table,Javascript,Html,Html Table,我有以下代码,它使用javascript数组生成HTML表: <HTML lang='en'> <head> <style> table { border-collapse: collapse; } table tr td { border: 1px solid #000;
<HTML lang='en'>
<head>
<style>
table {
border-collapse: collapse;
}
table tr td {
border: 1px solid #000;
padding: 10px;
}
table tr td:hover {
color: red;
}
</style>
</head>
<body>
<div id="container"></div>
<script>
window.addEventListener("load", function(){
var data = ["doge", "cate", "birb", "doggo", "moon", "awkward", "coool", "epic"];
var perrow = 3,
html = "<table><tr>";
for (var i=0; i<data.length; i++) {
html += "<td class=\".cell\" >" + data[i] + "</td>";
var next = i+1;
if (next%perrow==0 && next!=data.length) {
html += "</tr><tr>";
}
}
html += "</tr></table>";
document.getElementById("container").innerHTML = html;
});
</script>
</body>
</HTML>
这个解决方案有两个问题:
提前感谢……:) 问题可能是因为在绑定事件处理程序时,表不存在 您应该使用处理程序 使用jQuery:
$('#container').on('mouseover', 'tr', function(){
var valueOfTd = $(this).find('td:first-child').text();
console.log(valueOfTd);
});
使用纯javascript:
var container = document.getElementById('container');
container.addEventListener('mouseover', function(event) {
var target = event.target.closest('tr');
if (! target) return;
var valueOfTd = target.querySelector('td:first-child').innerText;
console.log(valueOfTd);
});
问题可能是因为在绑定事件处理程序时,表不存在 您应该使用处理程序 使用jQuery:
$('#container').on('mouseover', 'tr', function(){
var valueOfTd = $(this).find('td:first-child').text();
console.log(valueOfTd);
});
使用纯javascript:
var container = document.getElementById('container');
container.addEventListener('mouseover', function(event) {
var target = event.target.closest('tr');
if (! target) return;
var valueOfTd = target.querySelector('td:first-child').innerText;
console.log(valueOfTd);
});
这里有一种方法。创建表后运行此代码(它可以紧跟在
document.getElementById(“container”).innerHTML=html;
)
说明:
返回文档中getElementsByTagName()
的集合。(为此,您还可以使用
,它允许您使用类似jQuery的CSS选择器来查找元素。)document.querySelectorAll('tr')
将上一次调用返回的集合转换为常规JS数组,允许我们对其调用Array.from
forEach
- 我们使用
来附加一个回调函数,当addEventListener
悬停在上方时,该函数将触发。这是 - 回调中的
参数包含有关鼠标悬停事件的信息李>事件
- 用户光标指向的立即元素是
。这为我们提供了用户光标所在的event.target
。这一部分有点微妙,但基本上,您可以将侦听器附加到父元素(
),当鼠标移到子元素(
)上时,将调用侦听器。实际上,您不必单独向每个单元格添加侦听器。搜索“event bubbling”(事件冒泡)以获取有关其工作原理的完整解释。)
的
属性提供单元格内的文本。这是DOM的标准属性textContent
- 这里有一种方法。创建表后运行此代码(它可以紧跟在
document.getElementById(“container”).innerHTML=html;
)
说明:
返回文档中getElementsByTagName()
的集合。(为此,您还可以使用
,它允许您使用类似jQuery的CSS选择器来查找元素。)document.querySelectorAll('tr')
将上一次调用返回的集合转换为常规JS数组,允许我们对其调用Array.from
forEach
- 我们使用
来附加一个回调函数,当addEventListener
悬停在上方时,该函数将触发。这是 - 回调中的
参数包含有关鼠标悬停事件的信息李>事件
- 用户光标指向的立即元素是
。这为我们提供了用户光标所在的event.target
。这一部分有点微妙,但基本上,您可以将侦听器附加到父元素(
),当鼠标移到子元素(
)上时,将调用侦听器。实际上,您不必单独向每个单元格添加侦听器。搜索“event bubbling”(事件冒泡)以获取有关其工作原理的完整解释。)
的
属性提供单元格内的文本。这是DOM的标准属性textContent
- 试试这个
$(文档).ready(函数(){
$(“#容器表”)。on('mouseenter','tr',function(){
var tdVal=$(this.children('td').text();
console.log(tdVal);
}
});
试试这个
$(文档).ready(函数(){
$(“#容器表”)。on('mouseenter','tr',function(){
var tdVal=$(this.children('td').text();
console.log(tdVal);
}
});
您可以使用以下方法
function setListeners() {
let tds = document.querySelectorAll('td');
tds.forEach((td) => {
td.addEventListener('mouseover', (e) => {
console.log(e.target.innerHTML);
});
})
}
并在设置容器的innerHTML后调用此方法
document.getElementById("container").innerHTML = html;
setListeners();
您可以使用以下方法
function setListeners() {
let tds = document.querySelectorAll('td');
tds.forEach((td) => {
td.addEventListener('mouseover', (e) => {
console.log(e.target.innerHTML);
});
})
}
并在设置容器的innerHTML后调用此方法
document.getElementById("container").innerHTML = html;
setListeners();
每个HtmleElement上的Vanilla JS事件绑定…太棒了!每个HtmleElement上的Vanilla JS事件绑定…太棒了!