0

这有点难以解释:我有一个简单的 PHP 文件,它输出另一个包含包含的 PHP 文件:

<?php include("file.php"); ?>

我想做的是只在第一页显示其中的一部分。所以我用溢出来创建一个带有滚动条的窗口:

<div style="height: 130px; width: 800px; border: 1px solid #CCCCCC; overflow: auto;">
 <?php include("file.php"); ?>
</div>

一切都很好。但是现在我想添加另一个功能:当您在这个溢出区域内单击并按 Ctrl+A 时,应该只选择溢出区域中的部分(而不是整个页面)。

我尝试使用 HTML 框架,这给了我想要的功能,但溢出的 PHP 文件没有被解析。有没有办法做到这一点并且仍然解析 PHP 文件?

4

2 回答 2

3

你有几个选择

不包含,通过 iframe 链接

我不知道你是怎么做到的,但是框架对服务器解析的内容没有影响。IFrame 或框架,只是发出一个常规的 GET 请求,然后服务器决定是否解析请求的文件。

文件1.php

<style>
    .document {
        height: 130px; 
        width: 800px;
        border: 1px solid #CCCCCC;
    }
</style>
<iframe src="file2.php" class="document" />

包含到限制“全选”的元素中

如果您只想包含“文本”(谁知道呢,可能是......)。考虑将包含的文件放入textarea.

文件1.php

<style>
    .document {
        height: 130px; 
        width: 800px;
        border: 1px solid #CCCCCC;
    }
</style>
<textarea class="document"><?php include('file2.php'); ?></textarea>

古怪的方式:抓住“ctrl+a”并应用 contenteditable 片刻

ContentEditable 字段限制了它们的“全选”。在此处查看演示

文件1.php

<style>
    .document {
        height: 130px; 
        width: 800px;
        border: 1px solid #CCCCCC;
    }
</style>
<div class="document"><?php include('file2.php'); ?></div>
$(window).bind('keydown', function(e) {
    if(event.ctrlKey && event.keyCode == 65) {
        var self = $('.document').attr('contenteditable', '');
        window.setTimeout(function() {
            self.removeAttr('contenteditable');
        }, 20);
    }
});

​与使用 textranges 选择内容相比,使用 contenteditable 有 1 个优势:在包含的文档之外单击时,会选择页面上的所有文本(而不是“强制”“选择仅包含的文件”功能)。

于 2012-10-11T16:33:57.687 回答
0

可能用 javascript 拦截组合键。如果您设法拦截它,那么您可能可以突出显示您需要的部分。有关可以做什么和不可以做什么的更详细分析,请参见此处。

编辑:

我已经在 Firefox 13 中检查过了,它似乎拦截了组合键 Ctrl+A

$(window).keydown(function(event) {
  if(event.ctrlKey && event.keyCode == 65) { 
    console.log("Ctrl+A event captured!");
    event.preventDefault(); 
  }
});

可能您可以在其中插入代码来选择您希望选择的文本部分。

编辑 2:如何选择文本:

我发现这篇文章解释了如何选择文本(用鼠标突出显示)。我把它放在一起得到这个:

$(window).keydown(function(event) {
  if(event.ctrlKey && event.keyCode == 65) { 
    console.log("Ctrl+A event captured!");
    selectText('test');
    event.preventDefault(); 
  }
});

function selectText(element) {
  var doc = document
      , text = doc.getElementById(element)
      , range, selection
  ;    
  if (doc.body.createTextRange) { //ms
      range = doc.body.createTextRange();
      range.moveToElementText(text);
      range.select();
  } else if (window.getSelection) { //all others
      selection = window.getSelection();        
      range = doc.createRange();
      range.selectNodeContents(text);
      selection.removeAllRanges();
      selection.addRange(range);
  }

同样,在 Firefox 13 中,这似乎有效。将需要选择的 div 的 ID 作为参数放入 selectText() 调用。

于 2012-10-11T15:15:28.377 回答