【问题标题】:jquery - working backwardsjquery - 向后工作
【发布时间】:2023-03-06 16:20:01
【问题描述】:

我可以使用以下代码设置表格元素的焦点:

document.getElementById($('#' + ListBoxVal + ' tr:eq('+lstRow+')')
        .attr('id')).focus();

我能够验证 tr 的 id 实际上是正确的 id:

console.log($('#' + ListBoxVal + ' tr:eq('+lstRow+')').attr('id'));

我需要做的是获取我所在 id 的 tr 的实际 HTML..

基本上使用此代码的一些变体,我需要 tr 元素的 html:

console.log($('#' + ListBoxVal + ' tr:eq('+lstRow+')').attr('id')); 

但我只需要开头的<tr> html。我不需要<td> 或结束</tr>

<table>
  <tr id='123'>
    <td>1</td>
    <td>2</td>
    <td>3</td>
  </tr>
  <tr id='abc'>
    <td>a</td>
    <td>b</td>
    <td>c</td>
  </tr>
</table>

所以我只想要&lt;tr id='123'&gt;

【问题讨论】:

  • 你能编辑你的帖子,用`包围你的代码sn-ps吗?我们看不到您想要或不想要哪些位! :)
  • 我很困惑——开头的 html 是什么意思?
  • 你考虑过.prev()函数吗?
  • 我以为我做到了...抱歉,如果我没有做到。
  • @Jeff 我建议在发布问题之前在预览视图中验证您的问题。 (预览视图就在您输入问题的框下方。)

标签: jquery


【解决方案1】:
var tr = $('#' + ListBoxVal + ' tr:eq('+lstRow+')')
var html = $('<tbody>').append(tr.clone()).html().replace(/>[\s\S]*/,'>')
console.log(html)

详情

您不能直接获取元素的 HTML,只能获取 DOM innerHTML。 (与 jQuery html() 相同)

首先我们创建一个新的空$('&lt;tbody&gt;')。这在文档中不存在,因此对我们的 JavaScript 来说是不可见的和私有的。没有其他人可以看到它。

然后我们使用.append(tr.clone()) 添加该tr 的副本。 (我们必须先复制它,否则我们将在append期间将其从原始位置删除)

然后我们得到带有.html() 的tbody 的innerHTML。我们现在有了 TR 的“外部 HTML”(&lt;tr...&gt;...&lt;/tr&gt;

最后一步很简单,我们需要去掉第一个&gt;之后的所有内容,所以我使用正则表达式.replace(/&gt;[\s\S]*/,'&gt;')(我喜欢正则表达式)(你可以说它是一个正则表达式,因为它是斜线/ .../)

正则表达式是&gt;[\s\S]*。它将从头开始并向前移动,直到找到&gt;,然后它将查找任何白色space 或非白色Space 字符。 ([\s\S]),它将查找任意数量的*。然后它将&gt;[\s\S]*替换为&gt;

现在您将最终产品存储到变量html。 :)

(仅供参考,当使用 jQuery 创建新的 HTML sn-ps(如 $('&lt;tbody&gt;'))时,只有在没有子项或属性时,您才能安全地省略结束标记。参见 jQuery: Risk of not closing tags in constructors

【讨论】:

  • 这行得通吗?将 &lt;tr&gt; 元素直接附加到 &lt;div&gt; 不会创建有效的结构 - HTML 解析器会遇到问题吗?
  • @George 成功了。无论如何,您可以解释一下您是如何得出这个答案的吗?我正在关注代码,但如果您能提供进一步的见解,我认为这将非常有帮助。
  • 我不确定我是否明白你的意思,但我会编辑一些细节。
  • @George - 例如,我不熟悉 tr.clone() 的作用,以及带有正则表达式的 .replace 命令。我可以再次查看所有内容,但以后可能对其他人有帮助。只是一个建议 ;) - 再次感谢您的帮助。
【解决方案2】:

使用 document.getElementById,并将 ID 传递给 jQuery 是一个多余的操作 - 这是 jQuery 的首要任务之一!如果您知道&lt;tr&gt; 元素的ID,您可以直接获取它并使用jQuery 获取html:

$('#123').html()

因为 ID 是(或应该是)唯一的,您可以安全地使用它们来引用任何元素 - 您通常不需要担心从包含元素之一开始。

我想我不明白您想要正确实现的目标 - 抱歉!

【讨论】:

  • 我认为这不能回答他的问题。也许应该是评论。
  • @Beejamin - 你是对的,但是我大大简化了这个例子,给你我正在寻找的东西。我正在处理的应用程序有重复的 ID,我不得不跳过各种障碍来设置焦点:)
  • @Jeff,您可以使用 tr[id=123] 而不是 #123 搜索重复的 id。 (当然这可能不是您问题的解决方案)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2014-04-21
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 2018-02-04
相关资源
最近更新 更多