JavaScript找不到`tr`元素。

huangapple go评论66阅读模式
英文:

javascript could not find the tr element

问题

我访问了一个私人网站,想要提取一个 tr 元素的内容。然而,即使我缓存了页面并通过打开文本文件确认了 tr 元素的存在,document.querySelector("tr") 仍然无法获取内容。而且,即使在浏览器中打开缓存的页面,我仍然无法得到结果。为什么会这样?

英文:

I visited a private website, and I want to retrieve the content of a tr element. However, document.querySelector("tr") cannot obtain the content even though I cached the page and confirmed that the tr element exists by opening the text file. Furthermore, even when I opened the cached page in the browser, I still couldn't get the result. Why is this?

答案1

得分: 0

如果HTML文本包含不完整或无效的标签,解析过程可能无法查询tr元素。

例如

// 缺少表格
const inValidHTML = `
<tr><td>第1行,第1列</td><td>第1行,第2列</td></tr>
<tr><td>第2行,第1列</td><td>第2行,第2列</td></tr>
`

// 正常
const validHTML = `<table>
<tr><td>第1行,第1列</td><td>第1行,第2列</td></tr>
<tr><td>第2行,第1列</td><td>第2行,第2列</td></tr>
</table>
`

// 正常。将tr更改为"mytr"
const validHTML2 = `
<mytr><td>第1行,第1列</td><td>第1行,第2列</td></mytr>
<mytr><td>第2行,第1列</td><td>第2行,第2列</td></mytr>
`

const parser = new DOMParser()
const doc = parser.parseFromString(inValidHTML, 'text/html')
const trElements = doc.querySelectorAll('tr')
console.log(trElements.length) // 0

console.log(parser.parseFromString(validHTML, 'text/html').querySelectorAll('tr').length) // 2
console.log(parser.parseFromString(validHTML2, 'text/html').querySelectorAll('mytr').length) // 2
英文:

If the HTML text contains incomplete or invalid tags, the parsing process may fail to query the tr element.

for example

<!-- begin snippet: js hide: false console: true babel: false -->

<!-- language: lang-js -->

// missing table
const inValidHTML = `
&lt;tr&gt;&lt;td&gt;Row 1, Column 1&lt;/td&gt;&lt;td&gt;Row 1, Column 2&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Row 2, Column 1&lt;/td&gt;&lt;td&gt;Row 2, Column 2&lt;/td&gt;&lt;/tr&gt;
`

// ok
const validHTML = `&lt;table&gt;
&lt;tr&gt;&lt;td&gt;Row 1, Column 1&lt;/td&gt;&lt;td&gt;Row 1, Column 2&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Row 2, Column 1&lt;/td&gt;&lt;td&gt;Row 2, Column 2&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
`

// ok. change tr to &quot;mytr&quot;
const validHTML2 = `
&lt;mytr&gt;&lt;td&gt;Row 1, Column 1&lt;/td&gt;&lt;td&gt;Row 1, Column 2&lt;/td&gt;&lt;/mytr&gt;
&lt;mytr&gt;&lt;td&gt;Row 2, Column 1&lt;/td&gt;&lt;td&gt;Row 2, Column 2&lt;/td&gt;&lt;/mytr&gt;
`

const parser = new DOMParser()
const doc = parser.parseFromString(inValidHTML, &#39;text/html&#39;)
const trElements = doc.querySelectorAll(&#39;tr&#39;)
console.log(trElements.length) // 0

console.log(parser.parseFromString(validHTML, &#39;text/html&#39;).querySelectorAll(&#39;tr&#39;).length) // 2
console.log(parser.parseFromString(validHTML2, &#39;text/html&#39;).querySelectorAll(&#39;mytr&#39;).length) // 2

<!-- end snippet -->

huangapple
  • 本文由 发表于 2023年2月24日 10:50:44
  • 转载请务必保留本文链接:https://go.coder-hub.com/75552208.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定