如何使用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
    的子节点顺序
  • 反转每个节点的每个文本子节点中的文本
  • 最后,将每个替换为其内容
jQuery没有
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。我刚刚编辑了这个问题以澄清问题。你想实现什么?你想复制一些浏览器支持的从右到左的功能吗通常有?没有。代码中只有一些具有该跨度的文本。这并不能达到反转内容的效果