【问题标题】:Get text in CSS3 column?在 CSS3 列中获取文本?
【发布时间】:2013-03-07 01:56:44
【问题描述】:

我在一个项目中使用 CSS3 对列的支持(到目前为止,我发现它比大多数 JavaScript 解决方案更健壮和可靠)。

问题:是否可以通过任何方式获取特定列中的文本?

【问题讨论】:

标签: javascript html css html-table


【解决方案1】:

然后……什么,两个月后?我终于找到了这个问题的答案。它依赖于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();
};

【讨论】:

  • 而且该列必须在屏幕上,我认为范围与视口有关
  • 您可以在屏幕上制作 iframe 并使用此代码,然后该列不必在屏幕上
  • @MichaelBates 我并不是说它没有(我确定它确实如此),只是不确定有多少用例适合。
  • @mattsven 这真的很好,但是我如何获得rect 的列?
  • 您将不得不根据被拆分为列的任何元素来计算它。尝试element.getBoundingClientRect() 作为初学者。
【解决方案2】:

我唯一的猜测是开始用SPAN 替换空格,然后检测该 SPAN 的垂直位置何时变小,然后您就知道您在下一列。最后一个 SPAN 成为列标记。

然后,您可以复制开头/结尾和/或列标记之间的文本。

【讨论】:

  • 有趣的想法。你会如何建议这样做?
  • 我会使用 jquery。用 替换空格,然后使用 jQuery 的 .each 循环遍历,设置,查看每个元素的 offsetTop。
  • 我也有类似的想法,但我正在寻找最快的方法。我这里的方法s all words(jQuery,哈哈)。 gist.github.com/matt-curtis/5189032
  • 不过,它跨越了单词,因为对我来说如何获得两个空间节点并不是很明显。我猜是相邻的文本节点?
  • 是的,但我没有找到任何故障安全的,并且反复警告“不要使用正则表达式解析html...”
猜你喜欢
  • 2011-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-10
  • 1970-01-01
相关资源
最近更新 更多