2010-03-03 72 views
1

HI,jQuery的,字符串,找到

有人可以幫我這個:

這是我的HTML:

<div class="Breadcrumb"> 
     <a href="#">Home</a>&nbsp;&gt;&nbsp; 
     <a href="#">Projects</a>&nbsp;&gt;&nbsp; 
     Projects Text 
    </div> 

我想用jQuery來獲取字符串究竟是不是在錨標籤,在這個例子中是「Projects Text」

理論上這樣的東西

jQuery的:

var name = $("Breadcrumb (not <a>) ").text(); 

,但我不需要這樣一個 「&nbsp;&gt;&nbsp;

謝謝!

回答

1

未經檢驗的,但應該工作:

var text = $('.Breadcrumb').contents().filter(function() { 
    return this.nodeType == 3; 
}); 

alert(text[text.length-1]); 
+0

它可以是nodeType == 2或4 錨點的數量是不同的 – AlexC 2010-03-03 20:21:37

+1

@Alexander嘗試代碼。 nodeType指的是元素的類型。 3表示TEXT_NODE(嘗試'alert(Node.TEXT_NODE);'),而不是ELEMENT_NODE。然後他抓取數組中的最後一個元素(最後一段文本)。您可能需要刪除一些標記,但這看起來像是一個很好的解決方案。 – 2010-03-03 20:34:53

0

這應該給你的 「A」 標籤的文本。你需要在javascript中進行一些字符串解析來剪出nbsp位。我建議一個正則表達式。

var foo = $(".Breadcrumb a").text(); 
+0

這不是他想要的。他想要的是「項目文本」。 – poke 2010-03-03 20:36:34

0

我建議改變HTML以下...

<div class="BreadCrumb"> 
    <a href="#">Home</a>&nbsp;&gt;&nbsp; 
    <a href="#">Projects</a>&nbsp;&gt;&nbsp; 
    <span class="your_class_name">Projects Text</span> 
</div> 

然後使用jQuery你可以只執行下列操作...

var name = $(".BreadCrumb .your_class_name").text(); 
+0

在定位標記中有意識地鍵入HTML而不是HREF。這現在已經修復。 – MillsJROSS 2010-03-03 20:41:03

1

那是不可能的,因爲&nbsp;&gt;&nbsp; Projects Text實際上是DOM樹中的一個節點。所以你不能單獨獲取Projects Text而不過濾掉。如果您知道,文本前面有&nbsp;&gt;&nbsp;,您可以簡單地將其分開。

或者正如MillsJROSS建議的那樣,您需要將代碼放在另一個標籤中。

+0

但用這  >  ,我能做到嗎? – AlexC 2010-03-03 20:40:55

+0

例如像這樣:'$('.Breadcrumb a:last')[0] .nextSibling.nodeValue' - 不知道jQuery是否有更好的方法,我沒有太多用處。 – poke 2010-03-03 21:01:06

0

@poke是正確的。更改您的HTML:

<div class="Breadcrumb"> 
    <a href="#">Home</a>&nbsp;&gt;&nbsp; 
    <a href="#">Projects</a>&nbsp;&gt;&nbsp; 
    <span>Projects Text</span> 
</div> 

的Javascript:

var name = $(".Breadcrumb span").text(); 

編輯:

如果您不能或不會改變HTML和你的麪包屑是一致的,那麼你可以使用一個正則表達式來擺脫空白以及之前和之後的任何東西,包括>

var name = $(".Breadcrumb").text().replace(/(^\s+|\s+$|(.*)>\s*)/g,""); 

我仍然認爲,如果你有對html代的控制權,添加額外的span標籤更清晰,可以讓你輕鬆地用css設置當前頁面的樣式。