2012-12-07 61 views
0

里面我有一个td这种格式:替换文本的一部分的TD

<td> 
    Business Owner - Delivery Director <br> 
    <a href="mailto:[email protected]">[email protected]</a> 
</td> 

如何我只能替换文本"Business Owner - Delivery Director"别的东西?

使用this.text()获取Business Owner - Delivery Director[email protected],但我只 Business Owner - Delivery Director.

+0

请勿使用jQuery。获取文本节点! – Bergi

+0

你基本上想要一个​​和
之间的字符串吗?一个简单的正则表达式可以为你做。 – Scorpion

+0

@Scorpion:没有。OP不想操纵HTML – Bergi

回答

1

结构,你就必须做字符串操作,或者使用split

var td = $("selector_for_the_td_element"); 
var text = td.html().split("<br>"); 
text[0] = "new content"; 
td.html(text.join("<br>")); 

...或使用indexOfsubstring

var td = $("selector_for_the_td_element"); 
var text = td.html(); 
var index = text.indexOf("<br>"); 
text = "new content" + text.substring(index); 
td.html(text); 

现在,如果你可以改变你的HTML结构如下:

<td> 
    <span>Business Owner - Delivery Director</span><br> 
    <a href="mailto:[email protected]">[email protected]</a> 
</td> 

...它变得轻松了不少:

$("selector_for_the_td_element > span").text("new content"); 
+0

我不认为他想做HTML操作 – Bergi

+0

@Bergi:这就是我读的。 *“我怎样才能取代文字......”*和*“'this.text()给我......”*。当然,这可以使用文本节点,但是由于他明确使用jQuery,因此面向jQuery的解决方案是合理的。 (虽然Upvoted Asad。) –

+1

@Bergi:OP没有提到任何关于“HTML操作”的偏好。 T.J:我喜欢'span'的建议,很好的做法。 – Cerbrus

6

可以使用childNodes属性来选择第一个文本节点并改变其值:

$('td')[0].childNodes[0].nodeValue = "New content"; 

这里是一个演示:http://jsfiddle.net/dpyNy/

+3

+1非常有用的提醒人们文本节点存在! jQuery倾向于掩盖... –

+0

谢谢asad。 – user1184100

-1

如果HTML结构exactlly您发布的内容,就可以实现这样的:

this.childNodes[0].nodeValue = 'hello'; //this is the td element 
+0

我假设你的意思是''td'带'this',但这是一个很差的变量名称选择。 – Cerbrus

+0

@Cerbrus它不是一个变量名,'this'不能是javascript中的变量名,我只是在问题的上下文中编写它,也许它是在事件处理程序环境中,为什么你可以说它是一个可怜的名字这个片段? – dencey

+0

哦,我在他的问题中错过了'this'。忘记我说了什么:-P – Cerbrus