【问题标题】:How to safetly replace the value after the "td" tag? (In JQuery) [duplicate]如何安全地替换“td”标签后的值? (在 JQuery 中)[重复]
【发布时间】:2013-08-19 21:20:04
【问题描述】:

在“td”标签内,如何在不删除整个“span”标签脚本的情况下替换“span”标签后的“BMW”字样? (在 JQuery 中)。

“BMW”一词是通配符。可以是“福特”、“沃尔沃”等。

我正在使用 JQuery 2.0 版

$('#'....).???

<td>
   <span column="17" style="cursor:pointer"></span> BMW
</td>

【问题讨论】:

  • 查看此问答以获得答案:stackoverflow.com/q/4106809/870729
  • 您是否成功定位了该元素?如果没有周围的 html,我们可能无法帮助您获得它。定位后,您可以轻松地使用正则表达式删除第一个跨度标签之外的任何内容
  • 是的,我已经成功地将“TD”元素定位为“$('#'+jqgridSpreadsheetId+'ghead_'+jqGridGroup[x].idx.toString()+'_'+x.toString ())”,它为我提供了“TD”元素内的全部值。

标签: javascript jquery


【解决方案1】:

如果文本节点是问题中的下一个兄弟,则只需使用 nextSibling:

$('span[column="17"]').get(0).nextSibling.nodeValue = 'Volvo';

FIDDLE

【讨论】:

  • 如果品牌是阿尔法罗密欧,那会起作用吗?下一个节点是文本节点,但 alpha romeo 2 是文本节点吗?
  • @KaiQing - 是的,效果很好 -> jsfiddle.net/yNnKD/1
  • get() 在这里做什么?
  • @isherwood - 它将 jQuery 选择转换为原生 DOM 元素。
  • @fletchsod - 无处不在?
【解决方案2】:

试试这个...请注意,我省略了任何空白的文本节点:

$("YOUR TD SELECTOR HERE")
    .contents()
    .filter(
        function() { 
            return this.nodeType == 3 && $(this).text().replace(/^\s\s*/, '').replace(/\s\s*$/, ''); 
        }
    )
    .text('text to replace here');

【讨论】:

  • +1 用于过滤空格。根据 html 的编写和/或缩小方式,这肯定需要考虑。但是 .text 似乎不起作用(replaceWith 确实)
【解决方案3】:

您可以使用.contents().filter().replaceWith()

示例:

$('table').find('td')
          .contents()
          .filter(function() {
              return this.nodeType === 3;
           })
           .replaceWith("hello world");
});

http://jsfiddle.net/V4wF5/1/

【讨论】:

  • 如果 HTML 是用多个换行符编写的,则会中断。
【解决方案4】:

编辑:我忘记了第一次通话的结束括号。

不确定您是如何识别列的,因此您可能需要更改选择器。这是一个直接的搜索和替换。您确实只想替换 BMW 一词,对吗?

// Example: $(table.cars td)
$('td').each(function()
{
    var repl = $(this).html().replace('BMW', 'Ford');
    $(this).html(repl);
});

【讨论】:

    【解决方案5】:

    我不知道有什么好的 jQuery 解决方案,所以我提供了低级的 javaScript 方式。很抱歉,但相信它会有所帮助。

    $("td").each(function(i,v){
      for (var i = 0;i < v.childNodes.length;i++){
        if (v.childNodes[i].constructor.name=="Text"){
          v.childNodes[i].nodeValue=v.childNodes[i].nodeValue.replace(/BMW/,"Volvo");
        }
      }        
    });
    

    编辑:
    它的小 bin 不兼容,所以它是更好的版本:

    $("td").each(function(i,v){
      for (var i = 0;i < v.childNodes.length;i++){
        if (v.childNodes[i] instanceof Text){
          v.childNodes[i].nodeValue=v.childNodes[i].nodeValue.replace(/BMW/,"Volvo");
        }
      }        
    });
    

    在这里,我将它变为现实:http://jsbin.com/ItotOPo/1/edit?html,js,output

    【讨论】:

      猜你喜欢
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      • 2021-08-01
      • 1970-01-01
      • 2019-01-03
      • 2014-07-29
      • 2021-06-26
      • 1970-01-01
      相关资源
      最近更新 更多