Динамически сгенерированное содержимое таблицы (с использованием XSLT) содержит одинарную кавычку (') и JavaScript генерирует Uncaught синтаксическую ошибку - PullRequest
0 голосов
/ 26 апреля 2018

Образец XML , как показано ниже.

<Items>
  <Item>
    <AssetType>Theme Article</AssetType>
    <Name>The State</Name>
    <Theme>Family</Theme>
    <DateAdded>2017-08-06T17:43:04</DateAdded>
    <ActivationDate>2017-06-04T00:00:00</ActivationDate>
    <ExpirationDate>2018-05-01T00:00:00</ExpirationDate>
    <Owner>Testing Owner</Owner>
    <SiteCount>18796</SiteCount>
    <Sites>
      <Site>
        <SiteName> XYZ</SiteName>
        <SiteUrl>https://sample.com/test/</SiteUrl>
      </Site>
      <Site>
        <SiteName>ABC O'Brian</SiteName>
        <SiteUrl>https://sample1.com/test/</SiteUrl>
      </Site>

    </Sites>
   </Item>
</Items>

Я использую XSLT для отображения элементов и использую Таблица данных складную кнопку для возврата внутренней xml-сети, Sitename и SiteUrl. Но выбрасывать исключение, если в нем есть одинарные кавычки.

    function format ( d ) { 
    var a='<div class="row-fluid_SiteUrl">' +
        '<div class="span12">' +
            '<table data-datatable="dynamic" data-mybuttons="copy,excel,pdf,print" class="table table-striped table-bordered" id="esSiteUrlResultsTbl">'+
    '<thead>'+
      '<tr>'+
        '<th>Site Name</th>'+
        '<th>Site URL</th>'+
      '</tr>'+
    '</thead>'+
    '<tbody>';

    var b= '<xsl:for-each select="Items/Item/Sites/Site">'+
            '<tr>'+
                '<xsl:variable name="Siteurl"><xsl:value-of select="SiteUrl"/></xsl:variable>' +
                '<td><xsl:value-of select="SiteName"/></td>'+
                '<td><a href="{$Siteurl}"><xsl:value-of select="SiteUrl"/></a></td>'+
            '</tr>'+
        '</xsl:for-each>';

var c="</tbody>"+
  "</table>"+
"</div>"+
"</div>";

    return a+b+c;    
}

Пример вывода с синтаксической ошибкой Uncaught.

  '<tr>'+
    '' +
     '<td>ABC - O'Brien Jr., George</td>'+
     '<td><a href="https://Sample.com/">https://sample.com//</a></td>'+
    '</tr>'+ 

1 Ответ

0 голосов
/ 26 апреля 2018

Вы не указали, где / как вы хотите использовать эту строку, функция Javascript format возвращает как XSLT, и я сомневаюсь, что вы сможете использовать такой фрагмент без некоторого контекста, но с точки зрения Javascript вам просто нужно убедитесь, что вы используете одинарные кавычки ' для разделения строковых литералов, а затем двойные кавычки " внутри для разделителей атрибутов HTML или XML. Таким образом, вы, по крайней мере, не должны получить синтаксическую ошибку Javascript:

function format ( d ) { 
    var a='<div class="row-fluid_SiteUrl">' +
        '<div class="span12">' +
            '<table data-datatable="dynamic" data-mybuttons="copy,excel,pdf,print" class="table table-striped table-bordered" id="esSiteUrlResultsTbl">'+
    '<thead>'+
      '<tr>'+
        '<th>Site Name</th>'+
        '<th>Site URL</th>'+
      '</tr>'+
    '</thead>'+
    '<tbody>';

    var b= '<xsl:for-each select="Items/Item/Sites/Site">'+
            "<tr>"+
                '<xsl:variable name="Siteurl"><xsl:value-of select="SiteUrl"/></xsl:variable>' +
                '<td><xsl:value-of select="SiteName"/></td>'+
                '<td><a href="{$Siteurl}"><xsl:value-of select="SiteUrl"/></a></td>'+
            '</tr>'+
        "</xsl:for-each>";

var c="</tbody>"+
  "</table>"+
"</div>"+
"</div>";

    return a+b+c;    
}

Если вам не нужна поддержка IE, то в наши дни использование обратных тиков в качестве разделителей строковых литералов может упростить помещение фрагментов XML или HTML в строковые литералы Javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...