कुछ कोड समीक्षा उपकरण इसे & प्रतिलिपि बनाने के लिए एक पक्ष-दर-पक्ष diff के एक तरफ से कोड चिपकाने की अनुमति देने के लिए कार्यान्वित करते हैं। मैंने देखा कि कैसे ReviewBoard इसे खींचता है।
सार है:
- जब एक स्तंभ चयन शुरू होता है, शैली
user-select: none
(और इसके उपसर्ग वेरिएंट, if necessary) के साथ सभी स्तंभों में कोशिकाओं। यह कॉलम चयन की उपस्थिति बनाता है। अन्य कॉलम अभी भी चुपके से चुने गए हैं, इसलिए आपको ...
copy
ईवेंट को रोकें और चयनित कॉलम की सामग्री को प्रतिबिंबित करने के लिए अपने पेलोड को बदलें।
समीक्षा करने के लिए समीक्षा बोर्ड कोड this CSS और this JavaScript शामिल है।
मैंने इसे काफी कम jsbin demo में खींच लिया।
यहाँ एक एकल-स्तंभ चयन की उपस्थिति बनाने के लिए सीएसएस है (आप सही के लिए मेज पर selecting-left
वर्ग को जोड़ने जब बाएँ स्तंभ चयनित किया जा रहा है, या selecting-right
):
.selecting-left td.right,
.selecting-left td.right *,
.selecting-right td.left,
.selecting-right td.left *,
user-select: none;
}
.selecting-left td.right::selection,
.selecting-left td.right *::selection,
.selecting-right td.left::selection,
.selecting-right td.left *::selection,
background: transparent;
}
यहाँ जावास्क्रिप्ट copy
घटना रोकना और डेटा का एक स्तंभ के मूल्य में प्लग करने के लिए:
tableEl.addEventListener('copy', function(e) {
var clipboardData = e.clipboardData;
var text = getSelectedText();
clipboardData.setData('text', text);
e.preventDefault();
});
function getSelectedText() {
var sel = window.getSelection(),
range = sel.getRangeAt(0),
doc = range.cloneContents(),
nodes = doc.querySelectorAll('tr'),
text = '';
var idx = selectedColumnIdx; // 0 for left, 1 for right
if (nodes.length === 0) {
text = doc.textContent;
} else {
[].forEach.call(nodes, function(tr, i) {
var td = tr.cells[tr.cells.length == 1 ? 0 : idx];
text += (i ? '\n' : '') + td.textContent;
});
}
return text;
}
वहाँ भी selecting-left
और selecting-right
सीएल जोड़ने के लिए कुछ कम दिलचस्प कोड है चयन की शुरुआत में गधे। एन-कॉलम टेबल को सामान्यीकृत करने के लिए इसे थोड़ा और काम करने की आवश्यकता होगी।
यह प्रैक्टिस में अच्छी तरह से काम करता प्रतीत होता है, लेकिन यह आश्चर्यजनक है कि यह कितना मुश्किल है! अच्छे प्रश्न के लिए
+1, लेकिन मुझे संदेह है कि यह असंभव है। क्या आप किसी भी तरह से जानते हैं कि उपयोगकर्ता मैन्युअल रूप से एक ही काम कर सकता है? – nnnnnn
नहीं, किसी भी सीधा तरीके से नहीं ... – cbp