2

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

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

我正在使用JQuery 2.0 版

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

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

5 回答 5

8

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

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

小提琴

于 2013-08-19T21:28:52.297 回答
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');
于 2013-08-19T21:33:15.057 回答
1

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

例子:

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

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

于 2013-08-19T21:27:09.897 回答
1

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

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

// Example: $(table.cars td)
$('td').each(function()
{
    var repl = $(this).html().replace('BMW', 'Ford');
    $(this).html(repl);
});
于 2013-08-19T21:28:43.087 回答
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");
    }
  }        
});

编辑:
它的小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/ItoOPo/1/edit ?html,js,output

于 2013-08-19T22:00:20.360 回答