如何避免使用cheerio(node.js)来获得特殊字符并获得单引号

时间:2018-11-21 09:00:27

标签: node.js cheerio

我有以下代码行可以替换静态html文件中的一些内容:

$ = cheerio.load( fs.readFileSync( path_Url ) ); 

$('a').each( ( idx , _e ) => { 

    let guidId = $(_e).attr('href').split('/').pop().split('.')[0],
    keyMessage = guidIdsMaper.get(guidId);
    keyMessage = ( keyMessage !== undefined ) ? keyMessage : ' ( please enter respective keyMessage  ) ';
    $(_e)
        .attr('href' , '#')
        .attr( 'onclick' , `document.location = 'veeva:gotoSlide(${keyMessage}.zip)'` )

});  

let inner_content =  $.html();
fs.writeFileSync( path_Url , inner_content , 'utf8'); 

因此,最初在我的html文件中,锚点如下所示:

<a href="melt://navigatetoitem/RHEU-1218304-0000_html_0002.html">
    <div id="item91263" class="pageItem" alt="Rectangle">&nbsp;</div>
  </a>

如您所见,使用下面的代码行:

$(_e).attr('href' , '#')
     .attr( 'onclick' , `document.location = 'veeva:gotoSlide(${keyMessage}.zip)'` )

但是使用替换代码,我得到了几个特殊的单引号'字符,因此输出如下:

<a href="#" onclick="document.location = &apos;veeva:gotoSlide(RHEU-1218304-0000_html_0002.zip)&apos;">
    <div id="item91263" class="pageItem" alt="Rectangle">&#xA0;</div>
  </a>

那我如何避免得到这个&apos;而得到'呢?是否有必要使用htmlparser2之类的东西,我已经尝试过了,到目前为止还没有运气。

1 个答案:

答案 0 :(得分:1)

您可以通过hack方法replace

$ = cheerio.load( fs.readFileSync( path_Url ) ); 

const SPECIAL_CHAR = '_XXX_'; // define you special string

$('a').each( ( idx , _e ) => { 

    let guidId = $(_e).attr('href').split('/').pop().split('.')[0],
    keyMessage = guidIdsMaper.get(guidId);
    keyMessage = ( keyMessage !== undefined ) ? keyMessage : ' ( please enter respective keyMessage  ) ';
    $(_e)
        .attr('href' , '#')
        .attr( 'onclick' , `document.location =${SPECIAL_CHAR}veeva:gotoSlide(${keyMessage}.zip)${SPECIAL_CHAR}` )

});  

let inner_content =  $.html().replace(new RegExp(SPECIAL_CHAR, 'g'), `'`); // hack you charactors
fs.writeFileSync( path_Url , inner_content , 'utf8');