如何使用JQuery反转标记之间的内容?
例如,我有:如何使用JQuery反转标记之间的内容?,jquery,Jquery,例如,我有: <span class="a">abcdef</span> <span class="b">123456</span> <span class="b">abc<span class="c">def</span>ghi</span> abcdef 123456 abcdefghi 并且只想反转之间的文本,如下所示 <span class="a">abcdef</spa
<span class="a">abcdef</span>
<span class="b">123456</span>
<span class="b">abc<span class="c">def</span>ghi</span>
abcdef
123456
abcdefghi
并且只想反转
之间的文本,如下所示
<span class="a">abcdef</span>
654321
ihg<span class="c">def</span>cba
abcdef
654321
ihgdefcba
如何使用JQuery?类似的内容可能会有所帮助:
var span$ = $( '.b' ),
txt = span$.text();
span$.prev().after( txt );
span$.remove();
还有
unwrap
函数ih JQuery您想做的事情可以描述为:
- 颠倒每个
的子节点顺序span.b
- 反转每个节点的每个文本子节点中的文本
- 最后,将每个替换为其内容
reverse
方法,但它有一个get
方法,可以将jQuery对象转换为数组,而数组有一个reverse
方法。然后我们把元素放回去
jQuery不能操作文本节点内容(并且它们的父元素的文本内容对于我们来说不够好),但是各自的原生DOM接口是标准化的,所以我们可以使用它。不幸的是,从ES5开始字符串没有反向方法。幸运的是,我们可以将它们转换为数组
在这里似乎是一种有用的方法,但文档并不意味着它适用于非元素节点。此外,我们希望删除span
,即使它是空的<代码>展开无法实现这一点。相反,我们可以使用
进一步的优化:因为我们无论如何都在丢弃跨度,所以我们不需要在跨度内实际反转其子级replaceWith
接受函数作为参数。我们可以用它来减少调用replaceWith
的次数。此外,我们希望避免$(this).contents().get()
,因为这涉及到每次迭代创建两个额外的jQuery元素。相反,我们可以使用像childNodes
这样的数组来保存相同的内容。虽然这个数组没有自己的reverse
方法,但是数组拥有的方法也可以在这里使用
这应该可以做到:
$("span.b").replaceWith(function(){
var children = this.childNodes;
for(var i = 0; i < children.length; i++){
if(children[i].nodeType === Node.TEXT_NODE){
children[i].nodeValue = children[i].nodeValue.split("").reverse().join("");
}
}
return [].reverse.call(children)
}
$(“span.b”).replacetwith(函数(){
var children=this.childNodes;
对于(变量i=0;i
你真的想打开span吗?如果你知道所说的span只包含文本而不包含标签,那么反转本身就很容易。是的,我也想打开span。我刚刚编辑了这个问题以澄清问题。你想实现什么?你想复制一些浏览器支持的从右到左的功能吗通常有?没有。代码中只有一些具有该跨度的文本。这并不能达到反转内容的效果