从给定的HTML文本中获取JQuery?

时间:2015-05-19 11:15:47

标签: javascript jquery html

我在使用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;

的字符串

我的问题是..如果我的猜测有效,我怎样才能获得每个给定唯一文本的唯一(如果可能,最短)查询字符串。

任何提示都会受到赞赏,而且对你的帮助人员来说也是如此!

3 个答案:

答案 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”。