2017-04-03 101 views
0

我有一个textarea,我想要得到的值,然后计算开始和结束div的数量。我在提交HMTL时遇到了问题,即使它已全部被转义,但我仍然遇到如下错误:Uncaught Error: Syntax error, unrecognized expression: &lt;div&gt;This is a test&lt;/div&gt;当输入<div>This is a test</div>到textarea时。在textarea val中使用find()与HTML字符

我希望能够保持HTML标签的内容,即能力来搜索<div作为并列于&lt;div

HTML

<h3>Paste your code in here</h3> 
<textarea name="code" id="code" cols="30" rows="10"></textarea> 
<p> 
    <a href="#" class="test-code-btn">Go for it!</a> 
</p> 

JS

$('.test-code-btn').on('click', function(){ 
    function escapeHtml(unsafe) { 
     return unsafe 
      .replace(/&/g, "&amp;") 
      .replace(/</g, "&lt;") 
      .replace(/>/g, "&gt;") 
      .replace(/"/g, "&quot;") 
      .replace(/'/g, "&#039;"); 
    } 

    var res = escapeHtml($('#code').val()); 
    console.log('res = ' + res); 

    var openDivs = $(res).find('&lt;div').length; 
    var closeDivs = $(res).find('&lt;/div').length; 

    console.log('openDivs: ' + openDivs + ', closeDivs: ' + closeDivs); 
}); 
+4

'.find()'方法不会执行基于文本的搜索,它会查找后代DOM元素。 – nnnnnn

+0

感谢您的信息,是否有预先构建的jquery功能,将工作? –

回答

1

这里有一些东西可以让你开始吧!

它在CodePen中工作。

var openCounter=0; 
var closeCounter=0; 

var raw = $('#code').val(); 
for(i=0;i<raw.length;i++){ 
    if(raw.charAt(i)=="<"){ 
    if(raw.charAt(i+1)=="\/"){ 
     //console.log("One close tag"); 
     closeCounter++; 
    }else{ 
     //console.log("One open tag"); 
     openCounter++; 
    } 
    } 
} 
console.log(openCounter+" opening tags and "+closeCounter+" closing tags."); 
+1

非常感谢:) –

相关问题