2010-03-03 73 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设置当前页面的样式。