如何安全地替换“td”标签后的值? (在JQuery中)

时间:2013-08-19 21:20:04

标签: javascript jquery

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

“宝马”这个词是通配符。它可以是“福特”,“沃尔沃”等。

我正在使用 JQuery 版本2.0

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

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

5 个答案:

答案 0 :(得分:8)

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

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

FIDDLE

答案 1 :(得分: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');

答案 2 :(得分:1)

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

实施例

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

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

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:1)

我不知道任何不错的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");
    }
  }        
});

编辑:
它的小容器不兼容所以版本更好:

$("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