找到具有以下文本的属性值的标签

我有以下HTML代码,需要获取属性值的标签,其中text =’Complaint’; 我找不到一个正确的方法来完成这个,因为跨度内的项目是动态加载的。 因此我不能用生成的id获取值,因此我需要使用标签找到ID。 如果该标签存在,即 。 我需要得到它的attr val。

这可能与Jquery有关吗?

       

而不是$("#CSSMLCall_call_outcome_types_4").is(":checked") ,我需要使用标签找到id,然后执行相同操作。

任何迅速回复都是值得注意的。

 var id = $('label:contains("Complaint")').attr('for'); 

我建议:

 var id = $('label').filter(function(){ return $(this).text().trim() == 'Complaint'; }).attr('for'); 

参考文献:

  • attr()
  • filter()
  • text()

尝试

 var id = $('label[for]').filter(function(){ return $.trim($(this).text()) == 'Complaint' }).attr('for') 

这是使用POJS编写的jquery的替代方法。

HTML

       

使用Javascript

 /*jslint maxerr: 50, indent: 4, browser: true */ /*global console, jQuery, $ */ (function () { "use strict"; function walkTheDOM(node, func) { if (node && node.nodeType) { if (typeof func === "function") { func(node); } node = node.firstChild; while (node) { walkTheDOM(node, func); node = node.nextSibling; } } } function escapeRegex(string) { return string.replace(/[\[\](){}?*+\^$\\.|]/g, "\\$&"); } function filterElementsByContains(elements, string) { var toStringFN = {}.toString, text = toStringFN.call(elements), result, length, i, element; if (text !== "[object NodeList]" && text !== "[object Array]" && !($() instanceof jQuery)) { return result; } result = []; if (typeof string === "string") { string = new RegExp("^" + escapeRegex(string) + "$"); } else if (toStringFN.call(string) !== "[object RegExp]") { return result; } function getText(node) { if (node.nodeType === 3) { text += node.nodeValue; } } length = elements.length; i = 0; while (i < length) { text = ""; element = elements[i]; walkTheDOM(element, getText); if (string.test(text)) { result.push(element); } i += 1; } return result; } function getAttribute(node, attribute) { var undef; if (!node || !node.nodeType || !attribute || typeof attribute !== "string" || !node.attributes || node.attributes[attribute] === undef) { return undef; } return node.attributes[attribute].nodeValue; } var labels = document.getElementsByTagName("label"); console.log(getAttribute(filterElementsByContains(labels, "Complaint")[0], "for")); console.log(filterElementsByContains(labels, "C")); console.log(filterElementsByContains(labels, /C/)); console.log(filterElementsByContains(labels, /client/i)); console.log(filterElementsByContains(labels, "Client")); console.log(filterElementsByContains($("label"), /Client/)); }()); 

产量

 CSSMLCall_call_outcome_types_1 [] [label, label] [label] [] [label] 

在jsfiddle

使用这些函数,您可以提供NodeList ,Element of Elements或jQuery对象作为elements参数。 string参数可以是字符串或正则表达式。

它将返回一个过滤元素数组,这些元素包含所提供字符串的完全匹配,或者匹配的正则表达式。

我相信这比jquery更强大/更灵活:contains选择器,它只能根据文本是否直接包含在所选元素中进行过滤。

这些function应该是交叉友好的,虽然我不能测试那里的每个浏览器,或每个可能的条件。

我还创建了一个jsperf,以便您可以比较jquery方法与此答案。

无论如何,我以为我会和你分享这个选择,而其他人也可能觉得它很有用。

对于任何使用Javascript寻找答案的人,只能使用htmlFor

 var id = label.htmlFor; 

喜欢:

 var id = document.getElementById("myLabel").htmlFor;