找到具有以下文本的属性值的标签
我有以下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;