javascript 如何让连字符后的所有字符串都变成斜体?

javascript how to make all strings italic after hyphen?

大家早上好

我有一个与我的大型商业产品标题相关的问题。在这里,我需要产品标题的第一部分以粗体显示,在连字符或破折号之后的第二部分需要以斜体显示。但问题是产品标题带有一个全局变量 %%GLOBAL_ProductName%% ,我无法将其与 span 标签分开。那么你能建议我如何在 javascript 的帮助下以斜体显示连字符后的其余字符串吗?

例如,查看此屏幕截图https://www.screencast.com/t/fKy0FhByzzl 这是大型商业网站 http://rp-staging2.mybigcommerce.com/categories

<li class="%%GLOBAL_AlternateClass%%">
    <div class="ProductImage" data-product="%%GLOBAL_ProductId%%">
        %%GLOBAL_ProductThumb%%
    </div>
    <div class="OutOfStockMessage InfoMessage" style="%%GLOBAL_ItemSoldOut%%">
        %%SNIPPET_SideAddItemSoldOut%%
    </div>
    <div class="ProductActionAdd" onclick="location.href='%%GLOBAL_ProductLink%%';">
        <p><a href="%%GLOBAL_ProductLink%%" class="%%GLOBAL_SearchTrackClass%% pname">%%GLOBAL_ProductName%%</a>
        </p>
        <p><em class="p-price">%%GLOBAL_ProductPrice%% USD</em>
        </p>
        <a href="%%GLOBAL_ProductURL%%" class="btn icon-%%GLOBAL_ProductAddText%%" title="%%GLOBAL_ProductAddText%%">%%GLOBAL_ProductAddText%%</a>
    </div>
</li> 

%%GLOBAL_ProductName%%

这个显示产品名称的变量请查看我提供的截图和网站link

使用一些很酷的 es6 特性(数组解构和模板文字)

$(".pname").each(function () {
    [beforeDash, afterDash] = $(this).text().split(" - ");
    $(this).html(`${beforeDash} - <i>${afterDash}</i>`);
});

看起来像:

如果您在您的网站中使用 jQuery,您可以使用如下内容:

$( window ).on( "load", function(){
  var text = $('.text');
  var x = text.text().split('-');
  text.html(`${x[0]} - <i>${x[1]}<i>`);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="text">
  Hello - World
</div>

如果有帮助,请检查...

https://jsfiddle.net/Lz8p11mc/1/

您需要用“-”分隔您的产品名称,然后将这些独立的名称添加到单独的跨度中,然后您可以根据需要设置这些跨度的样式。我写了简单的测试用例代码,你可以根据自己的需要修改。

<html>
<script>
         var productName = 'ABC-XYZ';
         var separatedNames = productName.split('-');
         var firtsName = separatedNames[0];
         var secondname = separatedNames[1];

  window.onload = function() {
    //when the document is finished loading, replace everything
    //between the <a ...> </a> tags with the value of splitText
    document.getElementById("myTag").innerHTML = '<span>'+firtsName+'</span>-<span class="secondnameCls">'+secondname+'</span>';
  }

</script>

<body>
  <li class="%%GLOBAL_AlternateClass%%">
    <p><a id='myTag'></a></p>
  </li>
</body>

</html>

尽可能在服务器端进行这种拆分。因为在客户端,您将在加载页面后操作字符串。所以在客户端做是不好的。但无论如何,我已经编写了 jquery 代码来满足您的要求。为了演示目的,我写了一个点击事件。请执行 onload 事件的逻辑。

$("#btn").click(function(){
$(".productName").each(function(){
var title = $(this).text();
var firstSentence = "<b>"+title.substr(0,title.indexOf('-'))+"</b>";
var secondSentence = "<i>"+title.substr(title.indexOf('-')+1)+"</i>";

var finalTitle = firstSentence+ "-" + secondSentence;

$(this).html(finalTitle);

});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!DOCTYPE html>
<html>
<head>

</head>
<body>
<a class="productName"> Sample1 - Product Name1</a><br>
<a class="productName"> Sample2 - Product Name2</a><br>
<input id="btn" type="button" value="Change Format">
</body>
</html>