match()textarea值然后将单词附加到维护其原始顺序的div

时间:2014-10-06 17:56:26

标签: jquery append match

我正在尝试将正则表达式匹配到textarea值中以提取单词,然后将它们附加到另一个div中 保留原始订单..但订单不受尊重..

如果我在textarea中有这个:

<textarea>
http://example.com
http://example.com
http://example.com
</textarea>

应用比赛后,(match1:/http/g),(match2:/:\/\//g),(match3:/example/g
我想获得这个:

<div id="myDiv">
<span>http</span><span>://</span><span>example.com</span>
<span>http</span><span>://</span><span>example.com</span>
<span>http</span><span>://</span><span>example.com</span>
</div>

但我正在使用此代码:

function myFun(eMatch, eType, eClass){
    var split = $('#myTextarea').val().match(eMatch);
    for (var i = 0; i < split.length; i++){
        if(split[i]){
           $('body').append('<'+eType+' class="'+eClass+'">'+split[i]+'</'+eType+'>');
        }
    }
}

myFun(/http/g, "span", "blue");
myFun(/:\/\//g, "span", "green");
myFun(/google/g, "span", "red");

它不保持原始订单......有没有办法保留原始订单?

Here's a JSfiddle demo

1 个答案:

答案 0 :(得分:0)

<强>更新:

看一下这段代码,看看这是不是你想要的: DEMO

function myFun(eMatch, eType, eClass,string){
    var split = string.match(eMatch);
    if(split==null) return false;
    for (var i = 0; i < split.length; i++){
        if(split[i]){
            $('body').append('<'+eType+' class="'+eClass+'">'+split[i]+'</'+eType+'>');
        }
    }
}

var lines=$('#myTextarea').val().split(/\n/);
var linesLength=lines.length;
if(typeof lines[linesLength]=='undefined') linesLength--;
var firstVal=$('#myTextarea').val();
$('body').append('<br>');
for(i=0;i<=linesLength;i++){
    myFun(/http/g, "span","blue",lines[i]);
    myFun(/:\/\//g, "span","green",lines[i]);
    myFun(/google/g, "span","red",lines[i]);
    myFun(/.com/g, "span","red",lines[i]);
    $('body').append('<br>')
}

你可以看到我已经改变了一些逻辑,你需要将一个字符串传递给函数,以使其适用于元素的文本,值和变量。

这段代码的作用基本上是逐行获取textarea的值,并将所有替换应用于每一行,以便按顺序获取值。