如何忽略 cheerio 从转属性到小写?

How ignore cheerio from turn attributes to lowercase?

如何告诉 cheerio 不要将属性更改为小写?

目前,cheeriofooBar 变为 foobar。如何不这样做?

codesandbox.io

const cheerio = require("cheerio");

const html = `
  <div>
   <h4></h4>
   <img src="">
   <input>
   <p fooBar></p>
  
  </div>

`;

const $ = cheerio.load(html);

const output = $.html();

console.log({ output });

我尝试根据 answer in github 添加 lowerCaseAttributeNames 但这无济于事:

const $ = cheerio.load(html, { lowerCaseAttributeNames: false });

结果:

<html><head></head><body><div>
   <h4></h4>
   <img src>
   <input>
   <p foobar></p> <------------------foobar. expected: fooBar
  
  </div>

</body></html>

我尝试使用 xmlMode,但它会产生关闭问题:

 <div>
   <h4/>
   <img src="">
   <input>
   <p fooBar=""/>
  
  </input></img></div>

UPADTE

我在 Github 中搜索了 lowerCaseAttributeNames,但它 only exist in the types,不确定它对代码有影响 :(

Cheerio 默认使用 parser5,lowerCaseAttributeName 是 htmlparser2 属性。

您可以尝试按照 github 页面中的指示在开头加载 htmlparser2:

// Usage as of htmlparser2 version 3:
const htmlparser2 = require('htmlparser2');
const dom = htmlparser2.parseDOM(document, options);

const $ = cheerio.load(dom);

在我深入研究 cheerio 源代码和许多其他库之后,我了解到您可以使用 cheerio 来获得您想要的东西。

首先,您应该通过xmlMode:true加载内容,并在调用html()时使用xmlMode:false:

const $ = cheerio.load(html, { xmlMode: true });
const output = $.html({ xmlMode: false });

完整代码也在codesandbox.io

const cheerio = require("cheerio");

console.clear();

const html = `
  <div>
   <h4></h4>
   <img src="">
   <input>
   <p fooBar></p>
  
  </div>

`;

const $ = cheerio.load(html, { xmlMode: true, lowerCaseAttributeNames: false });

const output = $.html({ xmlMode: false });

console.log({ output });

/*
<div>
   <h4></h4>
   <img src>
   <input>
   <p fooBar></p>
  
  </div>
*/