JQuery:包含找不到文本

时间:2017-06-26 16:51:41

标签: javascript jquery

我正在尝试使用:contains来查找div中的文本位,并且它工作正常,除非它遇到包含“& nbsp”或“'”的文档。

奇怪的是,我可以使用:甚至包含“& amp”的文本,但不包含其他情况。

这是我的尝试,也是https://jsfiddle.net/sesyj5kd/

<div class="container">
  <div class="row">
    <div class="col-md-8">
     <div class="well">
        <div id="dText" style="background: white; height: 90%; overflow-y:auto;" ></div>
     </div>    
    </div>   
  </div>  
</div>

脚本:

var str1 = "<html><head></head><body><p>This is the doc's first sentence</p><div>not the first sentence, but it's in a div & all </div>    </body></html>";

$("#dText").html( str1 );

console.log( $("#dText").html() ); 
console.log( $("*:contains('the doc's first')") );
console.log( $("*:contains('in a div & all')") );

第二个:包含查找指定的文本,但第一个没有,即使我搜索“doc \”s;是否有必要/可能转义像&amp; nbsp或类似的东西?

主要问题我面临的是div.html(htmlString)正确显示内容,但是看一下console.log(div.html())我可以看到很多&amp; ; nbsp(尽管这些不在HTML字符串中)阻止:当目标文本在单词之间有单词时,包含对任何多字查询的正常工作。

2 个答案:

答案 0 :(得分:1)

您需要更改一行:

console.log( $("*:contains('the doc's first')") );

为:

console.log('Second Log: ' +   $("*:contains(\"the doc's first\")").length );
                                             ^^               ^^

&#13;
&#13;
var str1 = "<html><head></head><body><p>This is the doc's first sentence</p><div>not the first sentence, but it's in a div & all </div>    </body></html>";

$("#dText").html(str1);

console.log('First Log: ' + $("#dText").html());
console.log('Second Log: ' + $("*:contains(\"the doc's first\")").length);
console.log('Third Log: ' + $("*:contains('in a div & all')").length);
&#13;
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>


<div class="container">
    <div class="row">
        <div class="col-md-8">
            <div class="well">
                <div id="dText" style="background: white; height: 90%; overflow-y:auto;"></div>
            </div>
        </div>
    </div>
</div>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

首先,您要控制日志记录一组元素,这些元素会占用搜索到的字符串。您应该定位有关它的信息......就像它的class

一样

我在你注入的字符串中添加了类。

然后,就像说,它是一个集合。像你这样简单的console.log()会输出第一个找到的元素......可能是bodyhtml。你必须定位最后找到的元素,&#34;最接近&#34;一个来自搜索过的字符串。

最后,你必须在搜索字符串中转义引号。

这是Fiddle ...查看控制台。

var str1 = "<p class='myP'>This is the doc's first sentence</p><div class='myDiv'>not the first sentence, but it's in a div & all </div>";

$("#dText").html( str1 );
console.log("String: "+ $("#dText").html() ); 

var test1 = $("*:contains('the doc\\'s first')");
var test2 = $("*:contains('in a div & all')");


// Get the last element found containing the string.
console.log("1: "+test1.last().attr("class"));
console.log("2: "+test2.last().attr("class"));