iT邦幫忙

0

取得節點的文字(但不包含子節點的文字)

對於HTML
<b id="test">我是 b 的文字<i>我是 i 的文字</i></b>
我只想得到 "我是 b 的文字" 這幾個字 要怎做呢?
我目前是用 jQuery
$copy = $("#test").clone(); //先 copy 節點
$copy.children().remove("*"); //移除所有子節點
var text = $copy.text(); //再去取得文字
alert(text);
可以解決問題 但用這種方式會複製整個節點~~ 應該效率會很差...有解嗎

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

4
wordsmith
iT邦高手 1 級 ‧ 2011-10-18 18:35:32
最佳解答

$copy[0].firstChild.nodeValue 可以取得「我是 b 的文字」,不過不知道你的需求是不是就這麼單純而已

wordsmith iT邦高手 1 級 ‧ 2011-10-18 18:39:07 檢舉

修正
$("#test")[0].firstChild.nodeValue
可以少一個clone的動作

builder iT邦新手 1 級 ‧ 2011-10-18 21:36:43 檢舉

謝謝!~ 可以 WORK~ 我 Jquery用久ㄌ~ 連 firstChild.nodeValue 這種 W3C 標準作法都忘了~ orz...

2
ccutmis
iT邦高手 2 級 ‧ 2011-10-18 16:42:58

小弟分享一個簡單的方式。假如test元素的結構正如版主說的那麼簡單的話,可以改用string.substr()函式就行了,例如:

&lt;pre class="c" name="code">


&lt;meta http-equiv="content-type" content="text/html; charset=utf-8" />
&lt;script src="jquery.js">&lt;/script>
&lt;script type="text/javascript">
$(function(){ 
		var childHtml=$('#test').html(); //取得#test的html源文字
		var len=childHtml.indexOf('&lt;'); //找到第一個&lt;字符的位置
		var result=childHtml.substr(0,len); //用substr取得所需的字串
		alert(result);
}); 
&lt;/script>


&lt;b id="test">我是 b 的文字&lt;i>我是 i 的文字&lt;/i>&lt;/b>

希望有幫助~!
P.S:本來想用RegEXP來取得所需字串,不過那也是會造成效率上的問題,所以先不用...

builder iT邦新手 1 級 ‧ 2011-10-18 21:34:29 檢舉

test 元素下的子元素是不固定的~ 而且字串若含有 ">" 就麻煩ㄌ~ 還是謝ㄌ

我要發表回答

立即登入回答