jquery - 操作元素中的文本

时间:2012-11-14 10:08:11

标签: jquery

使用jQuery,我如何将“章节标题”移到“1.1”旁边,以便它读取......“1.1章节标题”,同时保留其他所有内容?

<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>

3 个答案:

答案 0 :(得分:6)

你在这里:

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

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

答案 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
  • 总是想要将标题移动到元素的第一个子元素之后的位置。

这些假设当然可以改变或适应;但是根据你声明的要求,它应该足以满足你的用例。

答案 2 :(得分: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);
});