jQuery只围绕字符串换行

时间:2014-07-26 23:50:14

标签: javascript jquery

我正在研究一些jQuery代码:



<blockquote>
  Quote
  <cite>Author</cite>
</blockquote>
&#13;
&#13;
&#13;

成:

&#13;
&#13;
<blockquote>
  <q>Quote</q>
  <cite>Author</cite>
</blockquote>
&#13;
&#13;
&#13;

到目前为止,我一直试图遍历每个块引用,分离<cite>元素,使用jQueries wrapInner函数将剩余的字符串包装在<q>元素中,然后重新附加{ {1}}元素。

最终目标是做这样的事情<cite>。除了使用jQuery自动放置<http://24ways.org/2005/swooshy-curly-quotes-without-images/>&amp; .bqstart

3 个答案:

答案 0 :(得分:4)

您可以检查nodeType的{​​{1}}属性,如果值为3,则该节点为childNode

textNode

答案 1 :(得分:1)

如果您的blockquote元素都具有相同的结构,那么很容易做到。 提供简单的JS /没有jQuery的答案。像Faiz这样的字符串方法的好处是,它是非破坏性的,所以它(稍微)更快(浏览器不需要重建DOM)&amp;它保留绑定到元素的数据(即事件监听器)

function wrapQuotes() {
  var quotes = document.getElementsByTagName('blockquote'), quote, qEl;
  for (var i = 0; i < quotes.length; i++) {
    quote = quotes[i].firstChild;
    // if the structure is always the same, you can leave out this if clause
    if (quote.nodeType === 3) { 
      qEl = document.createElement('q');
      qEl.appendChild(quote); // or .childNodes[0]
      quotes[i].insertBefore(qEl, quotes[i].firstChild);
    }
  }
}
wrapQuotes();

答案 2 :(得分:0)

我在这里猜一点,但你想要的是:

$('blockquote')
    .wrapInner('<q>')
    .find('cite')
    .each(function ea(){
        $(this).appendTo($(this).closest('blockquote'));
    });

http://jsfiddle.net/532At/