【问题标题】:How to get specific row's HTML into a jquery variable如何将特定行的 HTML 放入 jquery 变量中
【发布时间】:2012-01-05 01:25:23
【问题描述】:

查看jsFiddle I set up

我的目标是获取每个 <tr> 的整个 HTML,该类具有“docClassesRow”类,并且位于具有特定名称值的 <a> 元素的 <tr> 之后(jsFiddle 表中的 docID) .

一旦我将所有匹配行的 HTML 放入变量中,我需要在另一个 <tr> 之后插入这些行,该 <a> 元素具有特定的名称值。出于此测试的目的,我可以在 docRow <tr> 之后将 HTML 插入回表中。

使用现有的 js,我没有将 HTML 放入变量中。

【问题讨论】:

  • jsfiddle 可能会有所帮助
  • 你的意思是这样的吗? jsfiddle.net/bdVAR/3
  • 你需要在.find('tr.docClassesRow')之前加上.parent()@jsfiddle.net/FWJE2/7
  • @Nacho - 在你的答案下方查看我的第二条评论。
  • 是的,就是这样!非常感谢,纳乔!

标签: jquery html get


【解决方案1】:

也许是这样的?我添加了对特定id的链接的搜索:

$(function(){
     $(".docClassesRow").each(function(){
         $("#specific").parents("tr:first").append($(this).html());
    });
});

http://jsfiddle.net/bdVAR/4/

更新 在您的代码中,解决方案是 http://jsfiddle.net/FWJE2/9/

【讨论】:

  • 我认为这行不通(或者至少我不确定如何实现它)。我用这个找到每个<tr> 标签:$docRow.find('tr.docClassesRow').each(function() {
  • 好的,感谢您的示例代码。我试过你的方法,但我不认为我的选择器复制哪些行不正确 - 表将有多个 <tbody> 元素,每个元素都有一个不同的文档,每个都有自己的一组类,所以我需要指定<tr> 查看要复制和附加到的代码。
  • 好的 - 我们很接近了,纳乔。它没有得到<tr> 标签,只有<td> 元素。我尝试添加另一个 .parent(),以“提升”另一个级别,但没有成功。
  • 所以你也需要tr?你需要的是outerHTML属性
  • 是的,我愿意 - 看看插入的 html 是如何把桌子弄得一团糟的...... ;)
【解决方案2】:

不要仅读取现有 DOM 元素的 HTML 以将其再次插入 DOM。使用现有的 DOM 元素并复制/移动它们,而不是它们的 HTML。这样会干净很多。

需要的先决条件

你需要的是:

  • .detach() 用于 "cutting" DOM 中的元素(不删除可能附加的 jQuery 数据),或.clone() 用于 复制要保留的元素当前位置,
  • .after()(或 .insertAfter(),如果您更喜欢相反的顺序或参数)用于在其他元素之后插入元素,

.clone().detach() 的示例

以下示例在表的行上实现 .clone().detach()。在第一列中选​​择将被复制/移动的行,在第二列中选择将粘贴复制/移动的行之后的行。选择了两行后,单击其中一个链接(取决于您要测试的功能)。见jsfiddle for demonstration

HTML

<table>
    <tr>
        <th>Which row?</th>
        <th>Copy after which?</th>
        <th>Original value</th>
    </tr>
    <tr>
        <td><input type="radio" name="from" checked="checked" /></td>
        <td><input type="radio" name="to" /></td>
        <td>AAAAA</td>
    </tr>
    <tr>
        <td><input type="radio" name="from" /></td>
        <td><input type="radio" name="to" checked="checked" /></td>
        <td>BBBBB</td>
    </tr>
    <tr>
        <td><input type="radio" name="from" /></td>
        <td><input type="radio" name="to" /></td>
        <td>CCCCC</td>
    </tr>
    <tr>
        <td><input type="radio" name="from" /></td>
        <td><input type="radio" name="to" /></td>
        <td>DDDDD</td>
    </tr>
</table>
<a href="#" title="" id="clone">Use .clone()</a>
<a href="#" title="" id="detach">Use .detach()</a>

JavaScript(执行 onLoad 或 onDomReady,以便找到合适的 DOM 元素):

jQuery('#clone').on('click', function(event){
    event.preventDefault();
    var from_row = jQuery('[name="from"]:checked').parents('tr');
    var to_row = jQuery('[name="to"]:checked').parents('tr');
    to_row.after(from_row.clone());
});
jQuery('#detach').on('click', function(event){
    event.preventDefault();
    var from_row = jQuery('[name="from"]:checked').parents('tr');
    var to_row = jQuery('[name="to"]:checked').parents('tr');
    to_row.after(from_row.detach());
});

请参阅 this jsfiddle 以获取其有效的证明。

【讨论】:

    【解决方案3】:

    你的代码的问题是find

    获取当前匹配元素集中每个元素的后代。

    在您的代码中是$docRow,所以它选择所有与您的.docRow a[name="178"]' 匹配然后.parent().parent() 获取匹配行内的所有&lt;td&gt;,很明显,在下一步中,当您在其中搜索&lt;tr&gt;,您将找不到任何东西,因为您正在当前的&lt;tr&gt; 中搜索。所以你需要重新考虑你正在尝试做的事情,因为这样它不会起作用,可能是作为替代解决方案,尝试搜索'tr.docClassesRow',然后在其后代中搜索具有a[name="178"]'的锚。

    【讨论】:

    • 我同意,MGA。 Nacho 对我的 Fiddle 的更新在弹出的警报中清楚地表明了这一点。我还需要获取&lt;tr&gt; 标签。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    相关资源
    最近更新 更多