Javascript 行编号和复制/粘贴(HTML/CSS)
我可以使用什么JS/CSS技巧来防止在有序列表中复制和粘贴数字Javascript 行编号和复制/粘贴(HTML/CSS),javascript,html,css,Javascript,Html,Css,我可以使用什么JS/CSS技巧来防止在有序列表中复制和粘贴数字 <OL> <LI>A <LI>B <LI>C </OL> A B C A B C 如果不可行,有什么替代方案 谢谢我猜它取决于浏览器。我试过IE 7、Firefox 3和Chrome,但它们都没有复制数字(Chrome“似乎”在选择中复制它们,但粘贴后它们就不存在了)。对于我来说,数字(Firefox 3)或“#”字符(Firefox 2)被复制,即使它们没有被选
<OL>
<LI>A
<LI>B
<LI>C
</OL>
A
B
C
谢谢我猜它取决于浏览器。我试过IE 7、Firefox 3和Chrome,但它们都没有复制数字(Chrome“似乎”在选择中复制它们,但粘贴后它们就不存在了)。对于我来说,数字(Firefox 3)或“#”字符(Firefox 2)被复制,即使它们没有被选择。在ie6上,我只得到选择。复制OL的号码是一种浏览器行为。我相信有些浏览器不会,但大多数浏览器会 页面加载后,您可以使用JavaScript重写代码,使其看起来相同,但不在下面。这将解决您的复制问题,但会导致其他问题,如可访问性 基本上,实现它的方法是将Javascript中的代码重写为2列,1列带有编号,1列带有内容。您可以使用网格系统,如或。用户可以选择包含内容的第二列,而无需选择第一列 这样做的问题是,它破坏了屏幕阅读器用户的语义标记,他们不再从有序列表中获益。可以在mousedown上执行此操作,以便仅当用户尝试选择文本时,您才重写它。并不是说我已经验证了这个想法 免责声明:我为雅虎工作 编辑 抱歉,忘记添加javascript以禁用对数字的取消选择。。。现在看看代码 选中此项可禁用跨浏览器选择: 如果Javascript是一个选项,您可以自己添加数字:
var ol = document.getElementsByTagName("ol")[0];
for(var i=0; i<ol.childNodes.length; i++) {
ol.childNodes[i].innerHTML = "<span style='MozUserSelect:none;'>"+i+".</span> "+ol.childNodes[i].innerHTML;
}
var ol=document.getElementsByTagName(“ol”)[0];
对于(var i=0;i试一试-它编写得相当快,但可以作为一个很好的开始。您需要做的一些事情是用新元素替换旧列表,而不是像我目前所做的那样将新元素直接添加到主体中。使用(选择器)。replaceWith(新元素)非常简单jQuery功能
<style type="text/css">
div.newList {
position:relative;
width:300px;
font-family:verdana;
font-size:12px;
line-height:150%;
}
div.newList div.column {
padding-left:30px;
}
div.column p {
margin:0;
padding:0;
}
div.numbers {
position:absolute;
top:0;
left:0;
width:20px;
}
div.numbers p {
text-align:right;
padding:0;
margin:0;
}
</style>
<script type="text/javascript">
$(document).ready(function(){
var newDiv = document.createElement("div");
$("body").append(newDiv);
$(newDiv).addClass("newList").html("<div class='column'></div><div class='numbers'></div>");
$("ol.alphabet li").each(function(){
var index = $("ol.alphabet li").index(this);
var content = $(this).text();
$("div.column").append("<p>"+content+"</p>");
$("div.numbers").append("<p>"+(index+1)+".</p>");
});
$("div.column p").each(function(){
var index = $("div.column p").index(this);
var height = $(this).height();
$("div.numbers p:eq("+index+")").height(height);
});
});
</script>
<body>
<ol class="alphabet">
<li>This is a sample row that will teach me how to get all of the things lined up.</li>
<li>Too Short.</li>
<li>C</li>
</ol>
</body>
div.newList{
位置:相对位置;
宽度:300px;
字体系列:verdana;
字体大小:12px;
线高:150%;
}
div.newList div.column{
左侧填充:30px;
}
第p列{
保证金:0;
填充:0;
}
部门编号{
位置:绝对位置;
排名:0;
左:0;
宽度:20px;
}
部门编号p{
文本对齐:右对齐;
填充:0;
保证金:0;
}
$(文档).ready(函数(){
var newDiv=document.createElement(“div”);
$(“正文”)。追加(newDiv);
$(newDiv).addClass(“newList”).html(“”);
$(“ol.alphabet li”)。每个(函数(){
var指数=$(“ol.alphabet li”).指数(本);
var content=$(this.text();
$(“div.column”)。追加(“”+内容+””;
$(“div.numbers”)。追加(“”+(索引+1)+“”;
});
$(“div.column p”)。每个(函数(){
var指数=$(“第p列”).指数(本);
var height=$(this.height();
$(“分区编号p:eq(“+索引+”))。高度(高度);
});
});
这是一个示例行,它将教我如何将所有内容排列起来
太短了
C
我认为答案更多地取决于您粘贴到的应用程序,而不是浏览器的复制过程,而这实际上是浏览器应该做的事情
希望您提供的是语义HTML,因此复制OL不是理想的结果吗?如果用户复制和粘贴一组包含链接或图像的段落或文本,会怎么样?您不会怀疑用户希望能够复制段落并粘贴完整的语义布局吗?您可以使用imagCSS可以用来抵消数字和文本,使其看起来像一个普通的列表
CSS:
因此,在这之后,您只需找出图像的放置位置。您无法真正控制浏览器/OS的剪贴板行为。您可以做的是提供一个“复制”链接,并使用jquery和插件
A
B
C
免责声明:上述示例可能不是100%功能性的;-使用中的表格怎么样
备选方案
<ul>
<li>Dotted list item</li>
</ul>
- 虚线列表项
打印:**列表项*
<ol>
<li>Numbered list item</li>
</ol>
编号列表项
印刷品:1。列表项
类别
列表项
类别
列表项
只给“列表项”一个缩进
解决方案
所以,为了做到这一点,在没有JS魔法的情况下,同时打破一些语义规则,就是在dl列表中只使用dt
<dl>
<dt>Item</dt>
<dt>Item</dt>
</dl>
项目
项目
希望这有帮助:-)使用OL
&LI
的解决方案是最具语义的,因为它提供了行号信息,并且每一行都是一个单独的块,因此您可以随意设置其样式。这些数字在没有CSS和JavaScript的文本浏览器中仍然可见。屏幕阅读器的用户可以从一行跳到另一行,跳过几行,他们总是知道自己在哪一行,有多少行。他们甚至可以跳过整个列表
选择的问题实际上并不在HTML/CSS/JS域中,因为你不能代替你的用户决定他想对复制的文本做什么。他可能想复制它,不管有没有这些行号。最好存储尽可能多的语义信息,并让用户选择要向我们提供的语义信息
<ol>
<li>Numbered list item</li>
</ol>
<dl>
<dt>Category</dt>
<dd>List Item</dd>
<dt>Category</dt>
<dd>List Item</dd>
</dl>
<dl>
<dt>Item</dt>
<dt>Item</dt>
</dl>