2011-03-17 31 views
0

我有以下'td'element,並且想要讀出字符串部分(單元格1),但沒有'span'部分,我該如何在jQuery中做到這一點?如何只讀取字符串並忽略JQuery中的其他元素

<td class="myTable">cell 1<span class='end'>&emsp;</span></td> 

謝謝。

+1

span標籤內部的信息可以變化嗎?或者它總是遵循這種模式與span標籤的內容? – 2011-03-17 23:09:54

回答

2

這裏有一個通用的解決方案,將做到這一點不難看的正則表達式的污穢:-)

var text = $('.myTable').clone() 
       .children() 
        .detach() 
       .end() 
       .text(); 

編輯1:
或者,如果您確定<span>將始終只包含som空格字符電子排序 - 您可以使用.text()後跟一個.trim(),像這樣:

$.trim($('.myTable').text()); 

編輯2:
只是爲了多打一些,這裏的另取一個通用的解決方案,不很大程度上涉及jQuery,因此效率更高。目前我真棒.readStringOnly()插件:

$.fn.readStringOnly = function() { 
    var nodes = this[0].childNodes, 
     text = ''; 
    for (var i=0, item; (item = nodes[i]); i++) { 
     if (item.nodeType == 3) { // text node! 
     text += item.nodeValue; 
     } 
    } 
    return text; 
    }; 

// Usage: 
// var text = $('.myTable').readStringOnly(); 

這基本上是第一個解決方案確實在純jQuery方法有什麼,但是因爲jQuery提供了文本節點處理一個被留下了兩個相當不錯的選擇不支持:低效的jQuery代碼,或者這種體積龐大的W3C-DOM流行度。 (一樣好我做了一個插件出來的。)

...

再說,你總是可以只使用一個正則表達式有人已經建議。 :-)

+0

@Mar然而,非常低效。 =(至少,你應該把detach()替換成remove()。detach()將信息保存在dom中......並且他的問題表明他想要除掉所有的子內容 – 2011-03-17 23:10:54

+0

'.detach )''就足夠了''.clone()'不會默認克隆數據或事件,相比之下效率低下嗎?當然,這是一個非常通用的解決方案,用於解決這個問題 – 2011-03-17 23:15:26

+0

@Mar直到你到達Jquery 1.4 +文檔摘錄:通常,綁定到原始元素的任何事件處理程序都不會複製到克隆中。可選的withDataAndEvents參數允許我們改變這種行爲,而且也將所有事件處理程序的副本綁定到元素的新副本。 ----從jQuery 1.4開始,所有元素數據(通過.data()方法附加的)也被複制到新副本.--- – 2011-03-17 23:17:54

0
var tableContents = $(".myTable").text(); 

剛剛測試過,這確實有效。示例頁面:

<html> 
<head> 
<script type="text/javascript" language="javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script> 
<script type="text/javascript"> 
$(document).ready(function() { 
    alert($(".myTable").text()); 
}); 
</script> 
</head> 
<body> 

<table> 
<tr> 
<td class="myTable">cell 1<span class='end'>&emsp;</span></td> 
</tr> 
</table> 
</body> 
</html> 
+1

這也將返回範圍標記內的所有內容,在這種情況下是 字符。 – 2011-03-17 23:03:58

+0

.text()將不起作用,它返回:單元格1(然後一些時髦的代碼,因爲Firefox顯示 有問題)。與.html()我可以看到它打印出來:單元格1 。我更多地進入.remove()或.empty()來擺脫span元素之前,我呼籲.text(),但似乎不會'工作要麼.... – ohana 2011-03-17 23:10:52

1
$(".myTable").html().replace(/<span.*<\/span>/gi, "") 

例如這裏:http://fiddle.jshell.net/TSYQJ/

+0

如果是跨度的情況下,我會得到upvote標記是她想要刪除的td中唯一總是存在的東西。否則,它不完整。 – 2011-03-17 23:15:13

相關問題