JavaScript高亮显示字段中选项卡上的表格单元格

JavaScript高亮显示字段中选项卡上的表格单元格,javascript,html,Javascript,Html,我有一个在表格中列出的网站。长按揭表格 每个表单元格中都有一个HTML对象。文本框、单选按钮等 当每个表格单元格都用标签插入时,我该怎么做?用一个非常浅的红色突出显示单元格,以避免引起注意,但告诉用户它们在哪里?可能: <script type="text/javascript"> //getParent(startElement,"tagName"); function getParent(elm,tN){ var parElm = elm.parentNode; whil

我有一个在表格中列出的网站。长按揭表格

每个表单元格中都有一个HTML对象。文本框、单选按钮等

当每个表格单元格都用标签插入时,我该怎么做?用一个非常浅的红色突出显示单元格,以避免引起注意,但告诉用户它们在哪里?

可能:

<script type="text/javascript">
//getParent(startElement,"tagName");
function getParent(elm,tN){
  var parElm = elm.parentNode;
  while(parElm.tagName.toLowerCase() != tN.toLowerCase())
    parElm = parElm.parentNode;
  return parElm;
}
</script>

<tr><td><input type="..." onfocus="getParent(this,'td').style.backgroundColor='#400';" onblur="getParent(this,'td').style.backgroundColor='';"></td></tr>
可能:

<script type="text/javascript">
//getParent(startElement,"tagName");
function getParent(elm,tN){
  var parElm = elm.parentNode;
  while(parElm.tagName.toLowerCase() != tN.toLowerCase())
    parElm = parElm.parentNode;
  return parElm;
}
</script>

<tr><td><input type="..." onfocus="getParent(this,'td').style.backgroundColor='#400';" onblur="getParent(this,'td').style.backgroundColor='';"></td></tr>

使用jQuery可以简化您的生活,您可以执行以下操作:

$('#mytableid input').focus( function() { 
    $(this).addClass('highlight'); 
}).blur( function() {
    $(this).removeClass('highlight'); 
});
这基本上是说,当表中的任何输入元素处于焦点下时,将highlight类添加到其中,一旦失去焦点,则删除该类

将css设置为:

input.highlight { background-color: red; }

你应该被设置好。

使用jQuery让你的生活更轻松,你可以这样做:

$('#mytableid input').focus( function() { 
    $(this).addClass('highlight'); 
}).blur( function() {
    $(this).removeClass('highlight'); 
});
这基本上是说,当表中的任何输入元素处于焦点下时,将highlight类添加到其中,一旦失去焦点,则删除该类

将css设置为:

input.highlight { background-color: red; }

您应该被设置。

这是我测试代码的表:

<table id="myTable">
  <tr>
    <td><input type="text" value="hello" /></td>
    <td><input type="checkbox" name="foo" value="2" /></td>
    <td><input type="button" value="hi" /></td>
  </tr>
</table>
以下是有效的代码:

// here is a cross-browser compatible way of connecting 
// handlers to events, in case you don't have one
function attachEventHandler(element, eventToHandle, eventHandler) {
    if(element.attachEvent) {
       element.attachEvent(eventToHandle, eventHandler);
    } else if(element.addEventListener) {
       element.addEventListener(eventToHandle.replace("on", ""), eventHandler, false);
    } else {
    element[eventToHandle] = eventHandler;
  }
}
attachEventHandler(window, "onload", function() {
  var myTable = document.getElementById("myTable");
  var myTableCells = myTable.getElementsByTagName("td");
  for(var cellIndex = 0; cellIndex < myTableCells.length; cellIndex++) {
    var currentTableCell = myTableCells[cellIndex];
    var originalBackgroundColor = currentTableCell.style.backgroundColor;
    for(var childIndex = 0; childIndex < currentTableCell.childNodes.length; childIndex++) {
      var currentChildNode = currentTableCell.childNodes[childIndex];
      attachEventHandler(currentChildNode, "onfocus", function(e) {
        (e.srcElement || e.target).parentNode.style.backgroundColor = "red";
      });
      attachEventHandler(currentChildNode, "onblur", function(e) {
        (e.srcElement || e.target).parentNode.style.backgroundColor = originalBackgroundColor;
      });
    }
  }
});
这里可能有你可以清理的东西,但我很快就把它们整理好了。即使每个单元格中有多个对象,这种方法仍然有效

不用说,如果你使用一个图书馆来帮助你完成这项工作,这会容易得多。我喜欢这两个图书馆,尽管还有其他图书馆也可以


从我开始写这个答案到我发布这个答案,有人发布了代码,显示了你将如何在jQuery中做类似的事情——正如你所看到的,要短得多!虽然我喜欢库,但我知道有些人不能或不愿使用库——在这种情况下,我的代码应该可以完成这项工作。

这是我测试代码的表:

<table id="myTable">
  <tr>
    <td><input type="text" value="hello" /></td>
    <td><input type="checkbox" name="foo" value="2" /></td>
    <td><input type="button" value="hi" /></td>
  </tr>
</table>
以下是有效的代码:

// here is a cross-browser compatible way of connecting 
// handlers to events, in case you don't have one
function attachEventHandler(element, eventToHandle, eventHandler) {
    if(element.attachEvent) {
       element.attachEvent(eventToHandle, eventHandler);
    } else if(element.addEventListener) {
       element.addEventListener(eventToHandle.replace("on", ""), eventHandler, false);
    } else {
    element[eventToHandle] = eventHandler;
  }
}
attachEventHandler(window, "onload", function() {
  var myTable = document.getElementById("myTable");
  var myTableCells = myTable.getElementsByTagName("td");
  for(var cellIndex = 0; cellIndex < myTableCells.length; cellIndex++) {
    var currentTableCell = myTableCells[cellIndex];
    var originalBackgroundColor = currentTableCell.style.backgroundColor;
    for(var childIndex = 0; childIndex < currentTableCell.childNodes.length; childIndex++) {
      var currentChildNode = currentTableCell.childNodes[childIndex];
      attachEventHandler(currentChildNode, "onfocus", function(e) {
        (e.srcElement || e.target).parentNode.style.backgroundColor = "red";
      });
      attachEventHandler(currentChildNode, "onblur", function(e) {
        (e.srcElement || e.target).parentNode.style.backgroundColor = originalBackgroundColor;
      });
    }
  }
});
这里可能有你可以清理的东西,但我很快就把它们整理好了。即使每个单元格中有多个对象,这种方法仍然有效

不用说,如果你使用一个图书馆来帮助你完成这项工作,这会容易得多。我喜欢这两个图书馆,尽管还有其他图书馆也可以


从我开始写这个答案到我发布这个答案,有人发布了代码,显示了你将如何在jQuery中做类似的事情——正如你所看到的,要短得多!虽然我喜欢库,但我知道有些人不能或不会使用库——在这种情况下,我的代码应该可以完成这项工作。

这将是一种痛苦的方式,而且不遵循低调JavaScript的规则。如果这对某人来说不是问题,那么很好,但我肯定会避开这些类型的解决方案。这将是一种痛苦的方式,并且不遵循低调JavaScript的规则。如果这不是某人的问题,那么好吧,但我肯定会避开这些类型的解决方案。note to OP-这使用jQuery,以防您不认识$note to OP-这使用jQuery,以防您不认识$