jQuery通过文本获取标签

Posted

技术标签:

【中文标题】jQuery通过文本获取标签【英文标题】:jQuery Get Label By Text 【发布时间】:2013-12-01 18:21:41 【问题描述】:

我有一个简单的问题,我为此创建了一些丑陋的代码。

我的问题是需要通过它显示的文本来获取标签,例如:

    <div class="editor-label">
    <label for="iwantthisid">Test<span class="editor-label-required">*                </span>

    </label>

所以在这里我想搜索页面(尽可能快)以获取带有 text = "Test" 的标签。

然后我想从该标签中提取“For”值。

最好的方法是什么。

我知道要解决部分问题,这只是$(element).attr("for") 这是我坚持的第一步!

谢谢

【问题讨论】:

【参考方案1】:

使用这个

$('label:contains(Test)').attr('for')

【讨论】:

谢谢,您认为这是最佳的搜索方式吗? @LmC - 绝对不是,但它有效,而且您可能永远不会注意到性能下降。 当然,这也会匹配Test TestI have a Test,这可能是个问题。 :contains doesn't offer exact matching, only substring matching. @Blazemonger - 标签还包含* ,所以这可能不是问题?【参考方案2】:

我建议:

$('label').filter(function () 
    return this.firstChild.nodeValue.trim() === 'string';
).attr('for');

Simple demo.

如前所述,为了更好地保证(如果不需要精确的大小写,并为那些不实现 String.trim() 的浏览器提供服务):

$('label').filter(function () 
    return $.trim(this.firstChild.nodeValue).toLowerCase() === 'string';
).attr('for');

Simple demo.

在功能环境中使用这种方法:

function getLabelByText(needle, caseSensitive) 
    var str;
    return $('label').filter(function()
        str = $.trim(this.firstChild.nodeValue);
        return caseSensitive ? str === needle : str.toLowerCase() === needle.toLowerCase();
    );


console.log(getLabelByText('Test',false));

Simple demo.

这些不同的方法取决于您要搜索的文本是否是label 元素的firstChild(根据您在问题)。

【讨论】:

如何使用参数调用该函数? 除了trim()ing 字符串之外,在某些情况下,您可能会发现将其转换为toLowerCase() 会有所帮助。【参考方案3】:

只需像这样为标签分配一个 id:

<label id="theLabel" for="iwantthisid">Test<span class="editor-label-required">*</label>

并通过$("#theLabel").attr("for")获取值

【讨论】:

搜索文本的全部原因是因为我们无法控制 ID。

以上是关于jQuery通过文本获取标签的主要内容,如果未能解决你的问题,请参考以下文章

用jquery和js获取select标签中选中的option值及文本

jQuery获取特定的选项标签文本并将动态变量放置在值中

jQuery获取特定的选项标签文本

jQuery 获取和设置HTML元素

jQuery:通过没有ID的标签名称标记(选择)内容文本

jquery修改a标签中文本的值。