我正在研究一些jQuery代码:
<blockquote>
Quote
<cite>Author</cite>
</blockquote>
&#13;
成:
<blockquote>
<q>Quote</q>
<cite>Author</cite>
</blockquote>
&#13;
到目前为止,我一直试图遍历每个块引用,分离<cite>
元素,使用jQueries wrapInner函数将剩余的字符串包装在<q>
元素中,然后重新附加{ {1}}元素。
最终目标是做这样的事情<cite>
。除了使用jQuery自动放置<http://24ways.org/2005/swooshy-curly-quotes-without-images/>
&amp; .bqstart
。
答案 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'));
});