基于id的jquery匹配元素

时间:2012-01-11 00:54:12

标签: javascript jquery regex getelementbyid closest

我是jquery的菜鸟。坚持并希望得到一些帮助。 目前正在构建一个从特定页面获取数据的工具。该页面如下所示:

<table width="100%" border="0" align="center" cellpadding="3" cellspacing="1">
 <tbody>  //This is data group 1    
  <tr id="parent0">   //Record 1
    <td align="left"> <---------- text1 here -------> </td>
    <td align="left"> <---------- text2 here -------> </td>
    <td align="left"> <---------- text3 here -------> </td>
  </tr>    
  <tr id="parent0">   //Record 2
    <td align="left"> <---------- text1 here -------> </td>
    <td align="left"> <---------- text2 here -------> </td>
    <td align="left"> <---------- text3 here -------> </td>
  </tr>    
 </tbody>
</table>

<table width="100%" border="0" align="center" cellpadding="3" cellspacing="1">
 <tbody>  //This is data group 2    
  <tr id="child0">   //Record 1
    <td align="left"> <---------- text1 here -------> </td>
    <td align="left"> <---------- text2 here -------> </td>
    <td align="left"> <---------- text3 here -------> </td>
  </tr>    
  <tr id="child0">   //Record 2
    <td align="left"> <---------- text1 here -------> </td>
    <td align="left"> <---------- text2 here -------> </td>
    <td align="left"> <---------- text3 here -------> </td>
  </tr>    
 </tbody>
</table>

以下是jquery的片段:

ancestor = $(this).closest("tr[id]");

  matchedElement = $(this).first();
  originalBgColor = $(matchedElement).css('background-color');
  $(matchedElement).css('background-color', 'green');
  $(matchedElement).bind('click.annotator', function(event) {
    event.stopPropagation();
    event.preventDefault();
    self.port.emit('show',
      [
        document.location.toString(),
        $(ancestor).attr("child0"),
        $(matchedElement).text()
      ]

我正在尝试从id为parent0和child0的<tr>块中捕获所有数据。

在当前工作状态下,该工具将两个表中的所有数据捕获为文本。理想情况下,我希望能够分别捕获所有<TR>块,将它们放入一个我可以迭代的数组中。

3 个答案:

答案 0 :(得分:2)

看起来您正在使用ID元素,您应该使用类。

而不是

<tr id="child0">
<tr id="parent0">

这样做

<tr class="child0">
<tr class="parent0">

ID不同,您可以使用class属性为多个元素指定相同的值。

然后你可以像这样选择它们

$("tr.child0,tr.parent0").each(
                          function() {
                             //this will be fired for each matched element
                             $(this).doSomething();
                          }
                         )

答案 1 :(得分:0)

$('tr[id="child0"]').each(function() {
                         //this will be fired for each matched element
                         $(this).doSomething();
                      }
                     );

这样你就可以得到id为child0的所有tr 请查看此链接以获取更多参考http://api.jquery.com/category/selectors/

答案 2 :(得分:0)

这样做......

$('cite.fn:contains(blabla)').css('color', 'red');

编辑:虽然这也符合“blablablabla”。

$('cite.fn').each(function () {
    if ($(this).text() == 'blabla') {
        $(this).css('color', 'red');
    }
});

这应该更准确。

编辑:实际上,我认为这个解决方案更优雅:

$('cite.fn').filter(function () {
    return $(this).text() == 'blabla';
}).css('color', 'red');;