2013-03-18 15 views
6

我正在使用CSS3支持項目中的列支持(到目前爲止,我發現它比其他大多數JavaScript解決方案更加健壯和可靠)。獲取CSS3列中的文本?

問題:是否有可能以任何方式獲取特定列中的文本?

+0

爲什麼不使用jQuery? – hjpotter92 2013-03-18 16:25:18

+0

似乎還沒有準備好黃金時間:http://caniuse.com/#feat=multicolumn – 2013-03-18 16:26:50

+2

也許這將有助於http://stackoverflow.com/questions/9430124/how-to-get-content-ofa-a- specific-css-column – imkost 2013-03-18 16:28:20

回答

7

而且......兩個月後呢?我終於找到了這個問題的答案。它依賴於document.caretRangeFromPoint (Webkit) or document.caretPositionFromPoint

var getAllTextInColumn = function(rect){ 
    /* 
     rect should be the size and x,y of the column 
     { top, left, width, height } 
    */ 

    if(document.caretRangeFromPoint){ 
     var caretRangeStart = document.caretRangeFromPoint(rect.left, rect.top); 
     var caretRangeEnd = document.caretRangeFromPoint(rect.left+rect.width-1, rect.top+rect.height-1); 
    } else { 
     return null; 
    } 

    if(caretRangeStart == null || caretRangeEnd == null) return null; 

    var range = document.createRange(); 
    range.setStart(caretRangeStart.startContainer, caretRangeStart.startOffset); 
    range.setEnd(caretRangeEnd.endContainer, caretRangeEnd.endOffset); 

    return range.toString(); 
}; 
+0

並且該列必須在屏幕上,我認爲範圍是相對於視口 – mattsven 2013-09-29 10:05:10

+1

你可以在屏幕上製作一個iframe並使用此代碼,然後該列不必在屏幕上 – 2014-04-03 08:08:00

+0

好點,不知道它有多可行,但是是的。 – mattsven 2014-04-03 13:22:15

1

我唯一的猜測是開始用SPAN替換空格,然後檢測該SPAN的垂直位置何時變小,然後您知道您在下一列。最後一個SPAN成爲列標記。

然後您可以複製開始/結束和/或列製造商之間的文本。

+0

有趣的想法。你會怎麼建議這樣做? – mattsven 2013-03-18 17:19:23

+0

我會使用jquery。用,然後使用jQuery的.each循環遍歷,設置,查看每個元素的offsetTop。 – 2013-03-18 17:22:35

+0

我有一個類似的想法,但我正在尋找最快的方法來做到這一點。我的方法在這裏 s all (jQuery,哈哈)。https://gist.github.com/matt-curtis/5189032 – mattsven 2013-03-18 17:24:54