Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在浏览器中呈现的文本_Javascript_Web Scraping_Innertext - Fatal编程技术网

Javascript 在浏览器中呈现的文本

Javascript 在浏览器中呈现的文本,javascript,web-scraping,innertext,Javascript,Web Scraping,Innertext,我尝试使用innerText属性从html中提取文本,如下所示: console.log(document.getElementById('row').innerText) 但是,输出的方式与我在浏览器上看到的不同 产生差异的原因是第一种情况下的table元素包含内联块的样式(见下文) 如何解决该问题,使文本的格式与浏览器中显示的格式相同 情况1: 输入: <html> <body id='test'> <table style="display:

我尝试使用innerText属性从html中提取文本,如下所示: console.log(document.getElementById('row').innerText)

但是,输出的方式与我在浏览器上看到的不同

产生差异的原因是第一种情况下的table元素包含内联块的样式(见下文)

如何解决该问题,使文本的格式与浏览器中显示的格式相同

情况1: 输入:

<html>
   <body id='test'>
      <table style="display: inline-block">
         <tr>
            <td>1</td>
         </tr>
         <tr>
            <td>2</td>
         </tr>
      </table>
      <table style="display: inline-block">
         <tr>
            <td>3</td>
         </tr>
         <tr>
            <td>4</td>
         </tr>
      </table>
   </body>
</html>
1 3
2 4
<html>
   <body id='test'>
      <table>
         <tr>
            <td>1</td>
         </tr>
         <tr>
            <td>2</td>
         </tr>
      </table>
      <table>
         <tr>
            <td>3</td>
         </tr>
         <tr>
            <td>4</td>
         </tr>
      </table>
   </body>
</html>
1 
2 
3
4
实际产出

1
2
3
4
1
2
3
4
情况2: 输入:

<html>
   <body id='test'>
      <table style="display: inline-block">
         <tr>
            <td>1</td>
         </tr>
         <tr>
            <td>2</td>
         </tr>
      </table>
      <table style="display: inline-block">
         <tr>
            <td>3</td>
         </tr>
         <tr>
            <td>4</td>
         </tr>
      </table>
   </body>
</html>
1 3
2 4
<html>
   <body id='test'>
      <table>
         <tr>
            <td>1</td>
         </tr>
         <tr>
            <td>2</td>
         </tr>
      </table>
      <table>
         <tr>
            <td>3</td>
         </tr>
         <tr>
            <td>4</td>
         </tr>
      </table>
   </body>
</html>
1 
2 
3
4
实际产出

1
2
3
4
1
2
3
4

虽然看起来应该有一种更简单的方法,但DOM不理解可见顺序,因此您可能必须手动转换值,如:

//从DOM填充domOrder(注意:这些示例选择器是脆弱的)
常量domOrder=[],visibleOrder=[];
//使用spread运算符获取表数组
常量inlineTables=[…document.queryselectoral(“表”)]
.filter(table=>table.style.display==“内联块”)
.forEach(表=>{
//获取行数
[…表.儿童]
//我不确定在换行上拆分是否总是可靠的
.forEach(tr=>domOrder.push(tr.innerText.split(/\n/g));
});
//通过从domOrder转换值来填充visibleOrder
const rowCount=domOrder.length;
const colCount=domOrder[0]。长度;
domOrder[0]。forEach((col,colNum)=>{
//向visibleOrder添加一行
visibleOrder[colNum]=[];
//转换值
domOrder.forEach((行,行数)=>{
visibleOrder[colNum][rowNum]=domOrder[rowNum][colNum];
});
});
控制台日志(visibleOrder)

1.
2.
3.
4.
5.
6.

您没有任何
#row
元素,因此您的
控制台.log(document.getElementById('row').innerText)
抛出错误。您能否共享您的Javascript代码,以便我们更好地了解您迄今为止所尝试的内容?@JamesGarcia他做到了,问题的第二行(虽然
#行
看起来可能只是一个输入错误)是的,行是一个输入错误,它应该是“test”。我基本上是在尝试获取整个HTMLY的文本。您正在获取
id=test
元素中的所有文本,正如它以文档顺序(1、2、3、4)显示的那样这就是innerText所做的——除非你也呈现它,否则你无法在页面中呈现它,这需要你完全解析HTML和样式,或者至少遍历DOM树并应用样式。问题是,我正在试图找到一个考虑到所有不同样式的健壮解决方案。你的解决方案有效e如果表格具有内联块样式,但在其他情况下会中断。例如,如果表格没有“内联块”样式,但一个表格具有“align=left”和“align=right”对于另一个表,该解决方案不起作用。感谢您的帮助。我只是想在开始自己编写代码之前确保没有一个简单的解决方案。