搜索术语,把它包装成标签

问题描述:

我有一些文字,我保存在变量$target搜索术语,把它包装成<span>标签

var $target = jQuery(this).text(); 

而且文本可以是这样的:

Hello world, attack on titan 進撃の巨人 is amazing! 

然后,我有可变$term通过:

var $term = jQuery(this).prev().text(); 

它可以包含类似于:

attack on titan 

在一个名为$result新的变量,我想搜索$target$term的内容和换行到<span>标签。因此,在这个例子中,$result将是:

var $result = 'Hello world, <span>attack on titan</span> 進撃の巨人 is amazing!'; 

一个相对简单的要求,但我的目标是表现在这里。什么是最好的方法?

+1

一旦有资格获得高质量的工作解决方案,我将获得50分的奖励。 –

+0

下面是一个实际的HTML工作示例https://jsbin.com/nayedo/edit?html,css,js,output – kevinkl3

Working Fiddle

这是一个比较简单的方法是:

var $target = "Hello world, attack on titan 進撃の巨人 is amazing!"; 
var $term = "attack on titan"; 
var $result; 

$result = $target.replace($term, "<span>"+$term+"</span>"); 

console.log($result); // => Hello world, <span>attack on titan</span> 進撃の巨人 is amazing! 

我们要做的就是更换我们正在寻找targetterm包裹在<span></span>term

此外,如果你做一次这个更多的规划,我建议你简化流程,使之成为功能:

var wrapInSpan = function(target, term){ 
    return target.replace(term, "<span>"+term+"</span>"); 
} 

$result = wrapInSpan($target, $term); 

console.log($result); // => Hello world, <span>attack on titan</span> 進撃の巨人 is amazing! 

注:

它通常被称为bad practice to altar the prototype of a native object ,就像@迈克尔的解决方案。如果你想让解决方案更加模块化,我建议将它制作成像我的解决方案一样的独立功能,而不是篡改String对象。

+1

这是可爱的尼克。跟这个一起去!谢谢! –

+0

@HenrikPetterson很高兴能帮到你! –

var target="Hello world, attack on titan 進撃の巨人 is amazing!"; 
var term="attack on titan"; 

var result=target.replace(term,"<span>"+term+"</span>"); 

你可以尝试使用.indexOf方法来搜索目标$内,$任期。

var $target = "this is some cool text"; 
var $term = "cool"; 
var $result; 
if($target.indexOf($term) != -1) { 
    $result = $target.replace($term, "<span>"+$term+"</span>"); 
} 

else { 
alert('Not there') 
}