2012-11-14 62 views
2

如何使用jQuery将“章节标题”移动到“1.1”旁边,以便它读取......“1.1章节标题”,同时保持其他所有内容相同?jquery - 操纵元素内的文本

<p> 
    1.1 
    <a name="_Toc159407685"></a> 
    <a name="_Toc161121797"></a> 
    <a name="_Toc208282996"></a> 
    <a name="_Toc315779471"></a> 
    <a href="link.jpg"> 
    <img class="img" alt="" src="link.jpg"> 
    </a> 
    Chapter Title 
</p> 
+0

这个问题一定有一些缺失。你为什么想这样做,而不是手动编辑它? – FixMaker

+0

“章节标题”是怎么到达的? – Roman

+0

它到达那里,因为Microsoft Word生成可怕的HTML。 –

回答

6

给你:

$("p").append($("p *").detach());​ 

DEMO:http://jsfiddle.net/MwDc6/

+1

+1:很好的解决方案 –

+0

这是不会在我的复杂文件中工作,但是,我已经接受并将重新正确地询问... –

1

你可以这样说:

$('p:contains("1.1")').each(function(){ 
    var text = $(this).text(); 
    txt = text.replace(new RegExp("chapter title", "g"), ''); 
    txt = text.replace(new RegExp("1.1", "g"), '1.1 chapter title'); 
    $(this).html(txt); 
}); 
+0

+1极端字面! –

2

我建议一个纯JavaScript方式:

function moveTitle(el) { 
    if (!el) { 
     return false; 
    } 
    else { 
     var titleNode = el.lastChild, 
      title = document.createTextNode(titleNode.nodeValue.trim()), 
      number = el.firstChild; 
     el.removeChild(titleNode); 
     el.insertBefore(title, number.nextSibling); 
    } 
} 

moveTitle(document.getElementsByTagName('p')[0]); 

JS Fiddle demo

虽然这并作出一些假设:

  • 要移动将始终是元素的最后一个子标题,
  • 这最后的孩子会总是textNode,和
  • 你会总是想要将标题移动到元素的第一个子元素之后的位置。

这些假设当然可以改变或适应;但考虑到您的要求,它应该足以满足您的使用情况。