我在使用JQuery解析html时遇到了一个问题。
让我举一个简单的例子来解答我的问题。 你可能已经知道了,当我需要解析...
<li class="info"> hello </li>
我通过
获取文字$(".info").text()
我的问题是..对于给定的完整html和文本标记,我可以找到查询字符串吗?
在上面的例子中,我想得到的是。
var queryStr = findQuery(html,"hello") // queryStr = '.info'
我知道可能有多个结果,并且根据DOM层次结构会有各种类型的表达式。
所以..一般......如果某些文本(在这个例子中,&#39;你好&#39;)在整个HTML中是唯一的,我可能会猜测必须有一个唯一且最短的查询&# 39;满足$(query).text()=&#34; hello&#34;
的字符串我的问题是..如果我的猜测有效,我怎样才能获得每个给定唯一文本的唯一(如果可能,最短)查询字符串。
任何提示都会受到赞赏,而且对你的帮助人员来说也是如此!
答案 0 :(得分:0)
我创建了一个可以帮助你的小功能:
function findQuery(str) {
$("body").children().each(function() {
if ( $.trim($(this).text()) == $.trim(str) ) {
alert("." + $(this).attr("class"))
}
});
}
见工作demo
答案 1 :(得分:0)
我不确定您实际想要实现的目标,但根据您的具体问题,您可以执行以下操作。
var queryStr = findQuery($('<li class="info"> hello </li>'), "hello"); // queryStr = '.info'
// OR
var queryStr = findQuery('<li class="info"> hello </li>', "hello"); // queryStr = '.info'
alert (queryStr); // returns a string of class names without the DOT. You may add DOT(s) if need be.
function findQuery(html, str) {
var $html = html instanceof jQuery && html || $(html);
var content = $html.text();
if ( content.match( new RegExp(str, "gi") ) ) {
return $html.attr("class");
}
return "no matching string found!";
}
答案 2 :(得分:0)
希望这个演示可以帮助你!!
$(document).ready(function() {
var test = $("li:contains('hello')").attr('class');
alert(test);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li class="info">hello</li>
</ul>
使用了jQuery属性“:contains”。