2016-07-07 4 views
3

私は、画面上で矩形を作成し、座標(上、左、幅、高さ)を与える領域選択ツールを作った。基本的には、その矩形の中にすべての(そして唯一の)目に見えるテキストを入れたいと思います。また、正確なテキストでなければなりません。繰り返しはありません。外接矩形内のすべてのテキストを取得

これは私が地域を作る方法です。

enter image description here

私はこのような何かしようとしている:

  var top = parseInt($('#selectionn33').css('top')) 
      var left = parseInt($('#selectionn33').css('left')) 
      var width = parseInt($('#selectionn33').css('width')) 
      var height = parseInt($('#selectionn33').css('height')) 

      var items = document.getElementsByTagName("*"); 
      for (var i = items.length; i--;) 
      { 
       var rect = items[i].getBoundingClientRect(); 
       if(rect.top >= top && rect.top <= (top + height)) 
       { 
        if(rect.left >= left && rect.left <= (left + width)) 
        { 
         console.log(items[i].textContent); 
        } 
       } 
      } 

をしかし、それは私が望んでいない大量のテキストを取得し、同様に条件を満たすが矩形の外側にある要素からのテキスト。

どうすればいいですか?

+0

既知のサイズの固定幅フォントを使用する場合、長方形内に収まらないテキストから文字を切り抜けることができるかどうかを確認する必要がありますすべてのテキストを取得した後? – adam0101

+1

これを行う簡単な方法は間違いありません。私の最善の提案は 'Range.getBoundingClientRect()'を使用して、範囲の開始と終了を繰り返し設定し、テストします。これは非常に速く醜いと遅くなるだろうが、可能でなければならない。 – nrabinowitz

+0

要素はどのように基準を満たしていますが、長方形の外側にありますか?選択枠に基づいてテキストの各行をトリミングしますか?または選択肢に完全に収まる要素のみ?複数の要素からテキストを収集した後、どのようにテキストを整理したいのですか?画像をアップロードして、予想される動作を詳しく説明できますか? –

答えて

0

コメントに記述されているように、コードにほとんど変更を加えずに、選択範囲内の要素をすべて取得することができます。基本的には、選択範囲内の左上隅にある要素を取得しています。

var $selection = $('#selection33'); 
var top = parseInt($selection.css('top')); 
var left = parseInt($selection.css('left')); 
var right = left + parseInt($selection.css('width')); 
var bottom = top + parseInt($selection.css('height')); 

var items = document.getElementsByTagName("*"); 
for (var i = items.length - 1; i >= 0; i--) { 
    var rect = items[i].getBoundingClientRect(); 
    if(
    rect.top >= top && rect.bottom <= bottom && 
    rect.left >= left && rect.right <= right 
) { 
     try 
     { 
      found = items[i].childNodes[0].nodeValue; 
     } 
      catch(err) 
     { 
      found = items[i].textContent; 
     } 
    } 
} 
+0

私は、四角形の中にテキストを表示するかもしれないいくつかの要素を見逃すかもしれないと思うが、それはより良いと思うが、実際の要素はそれを超えている。まだ遭遇していない。これは起こっていますが、ビデオを見ると、親が子供のテキストを自分のものとして数えるため、テキストが繰り返されている可能性があります。 http://tryna.get.a.handbeezy.com/2016-07-06_21-42-34.mp4 – madprops

+0

これは非常に複雑なシナリオで、さまざまな可能性があります。あなたは本当に必要なものについて考えるべきであり、あなたの質問をより詳細に更新する必要があります。 –

+0

つまり、計算にパディングを含めたり、選択範囲外の要素を取得したり、重複要素をチェックしたりして重複を避けることができます –

関連する問題