2013-08-19 39 views
2

在「td」標籤內,如何在不刪除整個「span」標籤腳本的情況下替換「span」標籤後的「BMW」字? (在JQuery中)。如何安全地替換「td」標籤後的值? (在JQuery中)

單詞「寶馬」是通配符的措辭。它可以是 「福特」, 「沃爾沃」 等

我使用JQuery的 2.0

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

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

爲什麼downvote? – Polaris878

+2

看到這個問題和答案爲您的答案:http://stackoverflow.com/q/4106809/870729 –

+0

你成功針對該元素?如果沒有周圍的html,我們可能無法幫助您達成目標。一旦有針對性的,你可以很容易地使用正則表達式來刪除任何不在第一個跨度標籤內 –

回答

8

只需使用nextSibling如果文本節點的下一個兄弟像這樣的問題:

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

FIDDLE

+0

如果製作的是Alpha Romeo,那會有效嗎?下一個節點將是文本節點,但是阿爾法羅密歐2文本節點? –

+0

@KaiQing - 燁,工作得很好 - > http://jsfiddle.net/yNnKD/1/ – adeneo

+0

什麼是get()在這裏做? – isherwood

1

編輯:我忘了第一個電話的結束括號。

不知道如何識別列,因此您可能需要更改選擇器。這是一個直接的搜索和替換。你確實只想替換寶馬這個詞,對嗎?

// Example: $(table.cars td) 
$('td').each(function() 
{ 
    var repl = $(this).html().replace('BMW', 'Ford'); 
    $(this).html(repl); 
}); 
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

+1用於過濾空白。取決於如何編寫和/或縮小html,這肯定需要考慮。但.text似乎不起作用(replaceWith) – dc5

1

我不知道任何不錯的jQuery解決方案,所以我提供低等級l 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