2013-12-17 22 views
0

我试图将每2个单词换成<div>标记。
例如所需的输出看起来像这样:
<div>one two</div><div>three four</div><div>five six</div>等等等等
但我真的开始,前两个单词都被忽略了,我真的开始:
one two<div>three four</div><div>five six</div>
这是我的代码,
HTML :jQuery:将div标记中的每2个单词换行

<h2><div>This is some long heading text to use as an example. This is some long heading text to use as an example</h2> 

的jQuery:

$("h2 div").each(function() { 
    var html = $(this).html().split(" "); 
    var newhtml = []; 

    for(var i=0; i< html.length; i++) { 

     if(i>0 && (i%2) == 0) 
      newhtml.push("</div><div>"); 

     newhtml.push(html[i]); 
    } 

    $(this).html(newhtml.join(" ")); 
}); 

我已经试过了后加入<div>标签标签在html中实现这种效果,但它似乎仍然没有工作。任何建议将不胜感激!

+0

你的HTML代码中缺少结束的div标签 – Nis

回答

0

你可以这样做:

HTML:(没有在那里又DIV)

<h2>This is some long heading text to use as an example. This is some long heading text to use as an example</h2> 

JS(注意最后一行):

$("h2").each(function() { 
    var html = $(this).html().split(" "); 
    var newhtml = []; 

    for(var i=0; i< html.length; i++) { 

     if(i>0 && (i%2) == 0) 
      newhtml.push("</div><div>"); 

     newhtml.push(html[i]); 
    } 

    $(this).html("<div>"+ newhtml.join(" ") +"</div>"); 
}); 
0

您明确地跳过循环中的第一个匹配,因此在循环提供帮助之前添加newhtml.push("<div>")。 这仍然留下你创建一个未关闭的div的问题,因此在建议循环之后添加newhtml.push("</div>")也是如此。

0

这是为我工作:

<h2>This is some long heading text to use as an example. This is some long heading text to use as an example</h2> 
<script type="text/javascript"> 
    $("h2").each(function() { 
     var html = $(this).html().split(" "); 
     var newhtml = []; 
     newhtml.push("<div>"); 

     for(var i=0; i< html.length; i++) { 

      if(i>0 && (i%2) == 0) 
       newhtml.push("</div><div>"); 

      newhtml.push(html[i]); 
     } 

     newhtml.push("</div>"); 

     $(this).html(newhtml.join(" ")); 
    }); 
</script> 

编辑:其实对于Entoarox答案:)代码

1
var html = 'This is some long heading text to use as an example.'.split(" "); 
var newhtml = []; 
for(var i=0 ; i<html.length-1 ; i+=2) newhtml.push(html[i]+' '+html[i+1]); 
if(html.length&1) newhtml.push(html[html.length-1]); 

'<div>'+newhtml.join('</div><div>')+'</div>' 

的最后一行是字符串"<div>This is</div><div>some long</div><div>heading text</div><div>to use</div><div>as an</div><div>example.</div>"

1

我不以任何方式正则表达式亲,而只是提供了一个可能的选择,我认为你可以做到这一点使用类似:

string.replace(/(\S+ \S+)/g, "<div>$1</div>"); 

像这样:

$("h2 div").each(function(){ 
    this.innerHTML = this.innerHTML.replace(/(\S+ \S+)/g, "<div>$1</div>"); 
}); 

http://jsfiddle.net/6JeFH/1/

+0

我的想法的改进!不过,它可以稍微修改以适合单数的单词。 – psquared

0

Please have a look at the fiddle:

我已经提供了两个例子

先不依赖于HTML是最初畸形

<h2> 
    <div> 
      This is some long heading text to use as an example. 
      This is some long heading text to use as an example 
    </div> 
</h2> 

而且一个地方只存在<h2>标签和奇数字

<h2> 
    This is some long heading text to use as an example. 
    This is some long heading text to use as an example oddnumber 
</h2> 

同一个JavaScript运行在他们的

$("h2 > div").each(divByTwo); 
$("h2").each(divByTwo); 

function divByTwo() { 
    var html = $(this).html().trim().split(" "); 
    var newhtml = []; 
    for(var i=1; i< html.length; i += 2) { 
     newhtml.push("<div>" + html[i - 1] + " " + html[i]+ "</div>");  
    } 

    if (html.length % 2 !== 0) { 
     newhtml.push("<div>" + html[html.length - 1] + "</div>"); 
    } 
    $(this).html(newhtml.join(" ")); 
}