【问题标题】:Finding Text with array and replace with link around text with a class equal to text用数组查找文本并用类等于文本的文本周围的链接替换
【发布时间】:2013-12-02 07:16:37
【问题描述】:

所以使用 jQuery,我尝试使用数组来搜索使用数组的段落元素,当它找到某些单词时,它将该单词转换为与该类的链接。

我正在尝试使用这个:

jQuery('.story').html(function(i,html) {
    var w = ['ocean','waves','bed', 'swimming'];
    $.each(w,function(i,w) {
        html = html.replace(new RegExp('<a href="" class="' + w + '">' + w + '</a>', 'g'),w[i]);
    });
    return html;
});

jsfiddle

最终结果会将ocean 变成&lt;a href="" class="ocean"&gt;ocean&lt;/a&gt; 等。

但它似乎不起作用。我也不明白为什么。提前谢谢。

m(_ _)m

_|7O

(最终的计划是让这些词在按下时播放特定的 SFX,并且我以班级为基础,所以当这个词再次出现在故事​​中时,它会播放相同的声音)。

【问题讨论】:

  • 您正在搜索链接,而不是单纯的单词。 r[i] 是什么?没有名为 r 的数组。
  • .val() 用于输入元素的值。您需要使用.html() 来更改元素的HTML 内容。
  • r 是错字,抱歉。固定
  • $.each 内部,w 是当前元素,而不是数组,所以w[i] 不起作用。不要重复使用这样的变量。
  • 修复了 html 部分。抱歉,我还在学习 jquery。

标签: javascript jquery regex arrays replace


【解决方案1】:
    var w = ['ocean','waves','bed', 'swimming'];
    $.each(w,function(i,w) {
        jQuery('.story').html(function(i,val) {
            val = val.replace(w,'<a href="" class="' + w + '">' + w + '<\/a>');
            return val;
         });  
    });

JS FIDDLE: http://jsfiddle.net/8XWf3/22/

【讨论】:

    【解决方案2】:

    您的代码存在一些问题:

    1. 您使用相同的变量iw 两次。它们相互覆盖。虽然这在这里没有什么区别
    2. 您使用.val 而不是.html.val 只能用于表单字段。
    3. 您在 replace 调用中交换了 reg exp 和替换

    试试这个:

    jQuery('.story').html(function(i,val) {
        var w = ['ocean','waves','bed', 'swimming'];
        $.each(w, function(j,w) {
            val = val.replace(new RegExp(w, 'g'), '<a href="" class="' + w + '">' + w + '</a>');
        });
        return val;
    });
    

    另外说明:如果数组中的一个单词是另一个单词的子字符串,那么按照您设置的方式进行操作可能会给您带来麻烦。当心这个。

    【讨论】:

      【解决方案3】:

      怎么样?

      var arr = ['ocean','waves','bed', 'swimming'];
      var result = $('.story').text();
      $.each(arr, function (i, val) {
          result =
            result.replace(val, '<a href="" class="' + val + '">' + val + '</a>');
      });
      $('.story').html(result);
      

      http://jsfiddle.net/8XWf3/21/

      【讨论】:

        【解决方案4】:

        像这样?

        var w = ['ocean','waves','bed', 'swimming'],
             reg = new RegExp('(' + w.join('|') + ')','g');
        
        jQuery('.story').html(function(_, curHtml) {
             return curHtml.replace(reg,"<a href='#' class='$1'>$1</a>");
        });
        

        Demo

        您需要使用html 而不是val 并根据所有单词构造正则表达式,以便它们可以一次匹配并将匹配的值替换为字符串并使用匹配标记$1

        【讨论】:

        • 是的!谢谢!而且我不知道$1 是什么,我在示例代码中看到过,但在我正在阅读的书中从未解释过。再次感谢老兄!
        猜你喜欢
        • 2011-09-19
        • 1970-01-01
        • 1970-01-01
        • 2019-10-20
        • 2021-10-19
        • 1970-01-01
        • 2021-11-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多