【问题标题】:Replacing nextSibling with other string用其他字符串替换 nextSibling
【发布时间】:2016-12-13 20:14:21
【问题描述】:

我有以下 span 元素:

<div class="text" contenteditable="true" id="example">
   <div class="outside">Type here <span class="inside"> please</span>.</div>
   <div class="outside">Name here <span class="inside"> first </span>name</div>
</div>

使用下面的js函数,我可以得到&lt;/span&gt;&lt;/div&gt;之间的长度:

$('span.inside').each(function() {               
    var sphs = $(this).get(0).nextSibling;
    var len = sphs.length;

    //If the length is less than 2
    if(len < 2){
        // i want to replace it with another words like "thanks."   

       }
 })

如果长度小于 8,那么我想在 &lt;/span&gt;&lt;/div&gt; 之间用另一个单词或字符串替换它(例如,thanks.)(参见单词“谢谢”放置)。

<div class="text" contenteditable="true" id="example">
   <div class="outside">Type here <span class="inside"> please</span>thanks.</div>
</div>

如何用另一个字符串替换它?

编辑:

请注意,我使用的是.each,因为可能有多个具有相同类名的 span 元素。在第一行中,只有一个句点(&lt;/span&gt;.&lt;/div&gt;),因此它满足条件并将替换为另一个单词(在本例中为“thanks”)。

第二行(&lt;/span&gt;name&lt;/div&gt;)的长度大于2,因此不会被替换。

我希望这可以澄清它。

<div class="text" contenteditable="true" id="example">
   <div class="outside">Type here <span class="inside"> please</span>.</div>
   <div class="outside">Name here <span class="inside"> first </span>name</div>
</div>

……会变成……

<div class="text" contenteditable="true" id="example">
   <div class="outside">Type here <span class="inside"> please</span> thanks.</div>
   <div class="outside">Name here <span class="inside"> first </span>name</div>
</div>

【问题讨论】:

  • $('span.inside').length; 是 jQuery 对象的长度(所以这里总是 1),而不是内容的长度!
  • @cFreed 我知道这一点。哈哈。请看下面var len = sphs.length;
  • 哦,好的。不够重视。
  • =) 不用担心。我想这个问题的第一部分是不必要的。我要编辑它。

标签: javascript jquery nextsibling


【解决方案1】:

$('span.inside').each(function() {               
    var sphs = $(this).get(0).nextSibling;
    var len = sphs.length;

    //If the length is less than 2
    if(len < 2){
        // DOM method:
        sphs.textContent = ' Thanks.';
        // jQuery method:
        $(this).parent().get(0).childNodes[2].textContent = ' Thanks.';
    }
 })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<div class="text" contenteditable="true" id="example">
   <div class="outside">Type here <span class="inside"> please</span>.</div>
   <div class="outside">Type here <span class="inside"> please</span> ok?</div>
</div>

或者在这里试试 https://jsfiddle.net/8pa4akzh/3/

【讨论】:

  • 这会影响outside 元素。我正在尝试将“&lt;/span&gt;.&lt;/div&gt;”替换为&lt;/span&gt;Thanks&lt;/div&gt;
  • 知道了,立即查看
  • 谢谢!真的很感激! :)
  • 更简单:`sphs.textContent = 'Thanks.';
  • 已更新,感谢 cFreed
【解决方案2】:

添加一个额外的(空的)跨度并设置它。就像设置span的text()一样简单。

HTML:

<div class="text" contenteditable="true" id="example">
    <div class="outside">Type here <span class="inside"> please</span><span id="extra"></span></div>
</div>

JS:

   //If the length is less than 2
   if(len < 2){
        $('span#extra').text("thanks.");
   }

【讨论】:

  • 这是 span 元素的内部。我正在尝试替换 span 元素之外的单词(在 &lt;/span&gt;&lt;/div&gt; 之间。
  • @steveKim 您是要删除“请”之类的任何文字,还是只是想添加“谢谢”?
  • 在本例中,“please”在跨度内。我正在尝试添加“谢谢”。就在跨度之外(但必须在'`和&lt;/div&gt;之间。因此,跨度内的任何东西都不会受到影响。
  • 很遗憾没有。在两者之间添加另一个元素会使代码更加复杂。因此,我试图避免它。我的意思是,我可以使用substr 来替换整个东西。但我想看看是否有更简单的方法来简单地定位 nextSibling 区域。
  • 感谢您提供更新的答案。更复杂的是,内部有多个具有相同类名的 span 元素(因此使用了.each)。 .parent() 不会是一种有效的方法。我将更新问题以澄清,
最近更新 更多