Как избежать получения специального символа и получения одинарной кавычки, используя cheerio (node.js) - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть следующие строки кода для замены небольшого содержимого моего статического 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)'` )

Но используя код замены, я получаю пару специальных символов для одинарной кавычки ', поэтому ниже вывод:1011 *

<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 голосов
/ 21 ноября 2018

Вы можете 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');
...