在特殊字符后找到一个字符串,移动它并在其周围包裹一个div

时间:2011-10-23 22:07:48

标签: javascript jquery

我有这个HTML代码,例如:

<div class="new">
 <div class="in"></div>
 <label>some text now watch this | the-thing</label>
</div>

我想:

  1. 找到“|”之后的文字性格特征
  2. 将其移至标签外
  3. 围绕它包裹一个span标记
  4. 我知道如何做第二和第三部分,但我不明白如何操纵字符串开头

    提前致谢

8 个答案:

答案 0 :(得分:1)

您可以使用正则表达式来获取/替换文本。然后创建一个span元素并将其附加到标签之后。

var str = $( "div.new label" ).html();
var match = str.match( /\|(.*)/ )[1];
$( "div.new label" ).html( str.replace( /\|(.*)/, "" ) );
$( "div.new" ).append( "<span>" + match + "</span>" );

示例:http://jsfiddle.net/4m9AX/

答案 1 :(得分:1)

以下是一个有效的例子:http://jsfiddle.net/jfriend00/TaDKp/

var re = /\|\s*(.*)$/;
var o = $(".new label");
var match = o.text().match(re);
if (match) {
    o.text(o.text().replace(re, ""));
    o.after("<span class='special'>" + match[1] + "</span>");
}

描述的步骤:

  1. 找到所需的标签对象
  2. 使用正则表达式
  3. 在标签对象的文本中查找文本
  4. 如果找到文本,请将其从标签中删除
  5. 在标签
  6. 后插入带有该文字的范围

答案 2 :(得分:0)

你可以这样得到字符串:

var str = $('div.new label').text();

然后使用字符串基元来切割所需字符串的位:)

答案 3 :(得分:0)

您可以使用JavaScript正则表达式捕获并替换特殊字符后的文本。阅读标准的RegExp类。

答案 4 :(得分:0)

要执行第一部分,您需要访问标签的内容。使用jQuery做到这一点。类似的东西:

$(".new > label").val();

然后在“|”之后得到文本角色,你需要的是两个javascript函数:indexOfsubstr

答案 5 :(得分:0)

您需要使用indexOf()来查找字符

之后的文本
var str = $('.new label').text();
var strToMove = str.substring(str.indexOf('|') + 1);

答案 6 :(得分:0)

我没有时间编写代码,但这可能是你应该如何去做的:

1:在标签上添加ID,例如<label id="originaltext"> 2.在您的javascript中,将变量指定给:document.getElementById("originaltext").innerText; 3.使用string.split使用“|”拆分文本字符分为2个变量 4.使用以下内容将原始div的内容设置为管道前的文本:document.getElementById("originaltext").innerText = stringbeforepipe 5.使用相同的方法设置新div的内容,除了使用在分隔符后存储字符串的变量。

答案 7 :(得分:0)

所以你希望最终的html片段是

<div class="new">
 <div class="in"></div>
 <span>the-thing</span>
 <label>some text now watch this</label>
</div>

jquery看起来像这样:

var node = $('label').contains('|').

var txt =  node.val();
var newtxt = txt.substr(0, txt.indexOf('|')-1);
var cuttxt = txt.substr(txt.indexOf('|')+);
node.before('<span>'' + cuttxt + '</span>');
node.text(newtxt);

不测试,可能不起作用,YMMV等......