带有jquery的子串选择器?

时间:2013-11-18 13:37:14

标签: javascript jquery

是否可以使用jquery仅选择字符串的一部分?例如,我有一个文本

<p>Metuentes igitur idem latrones Lycaoniam magna parte campestrem</p>

所以现在如果用户搜索字符串,我希望它被突出显示(例如我们使用粗体标记)

<p>Metuentes igitur idem latrones <b>Lycaoniam</b> magna parte campestrem</p>

然后,如果需要,我们可以恢复原始字符串。

  1. 第一个问题是我们是否可以使用jQuery选择这样的子字符串,并使用jQuery方法(如.css())将样式应用于该元素。
  2. 第二个问题是如果我们没有这样的选择器,我们如何使用jQuery或javascript通过字符串操作来实现它
  3. 感谢。

    已更新

    感谢大家的努力。这是一个小程序,是我正在寻找的最终结果http://jsfiddle.net/TPg9p/3/干杯!

5 个答案:

答案 0 :(得分:2)

如果您知道要搜索的元素:

var string = "Lycaoniam";
var e = $("elementSelector"); // put here your selector
e.html(e.html().replace(new RegExp(search, "gi"), "<b>"+search+"</b>"));

对于更多元素,只需循环遍历它们并进行替换。要制作一个可切换的样式,我会使用自定义类:

 e.html(e.html().replace(new RegExp(search, "gi"), "<span class='highlight'>"+search+"</span>"));

并将其删除:

$(".highlight").contents().unwrap();

.contents()。unwrap()不仅可以剥离类(必须相应地设置样式),还可以剥离标记。

答案 1 :(得分:1)

根据这里的答案:Wrap around part of text inside an element

您可以执行以下操作:

$('p').html(function(index, oldHtml){
   return oldHtml.replace(/(amet)/g, '<span>$1</span>');
});

http://jsfiddle.net/YxMvq/

答案 2 :(得分:1)

使用纯jQuery无法做到这一点。你可以这样做:

var search = 'Lycaoniam';
var orig = $('p').html();
var highlighted = orig.replace(new RegExp(
    search.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), 'gi'
), '<b>$&</b>');
$('p').html(highlighted);

要恢复原始文字:

$('p').html(orig);

search.replace(...)部分允许处理特殊字符:http://jsfiddle.net/wared/TPg9p/

答案 3 :(得分:1)

搜索文字并替换文字。

HTML:

<p id="mainText">Metuentes igitur idem latrones Lycaoniam magna parte campestrem</p>
<input type="text" id="inputTextBox" />
<input type="button" id="findButton" value="Find" />

jQuery:

$("#findButton").click(function(){
    var inputText = $("#inputTextBox").val();
    var mainText = $("#mainText").text();
    var updatedText = "<b>" + inputText + "</b>";
    mainText = mainText.replace(inputText, updatedText);
    $("#mainText").html(mainText);
});

Demo

答案 4 :(得分:0)

您知道HTML何时创建您想要的单词?然后我建议改为做

<p>Metuentes igitur idem latrones <span class="js-highlightable">Lycaoniam</span> magna parte campestrem</p>`

现在,如果你想突出显示它,那就

$(".js-highlightable").toggleClass("highlighted"); 

可以在highligthed类中定义任何样式。如果您希望能够仅将更改应用于该单个元素而不是所有具有id类的元素,您也可以使用js-highlightable作为范围。