有一塊div
元素包含一段內容, 想要利用 CTRL+A
選中那塊div
元素下的的區間. 同時我又不想選中 div之外的內容, 默認狀況下會將整個html頁面能夠選中的內容選中.javascript
<div> <p>我想被選中</p> </div>
<div contenteditable="true" id="app"> <p> 我想被Ctrl+A選中 </p> <br /> <p> 我也想被Ctrl+A選中 </p> </div> <script> var app = document.getElementById('app'); app && app.addEventListener('keydown', function (event) { if ((event.ctrlKey || event.metaKey) && event.keyCode == 65) { console.log('allow') } else { event.preventDefault ? event.preventDefault() : event.returnValue = false; } }); </script>
原理css
contenteditable
屬性, 讓元素擁有控件自帶的相似input
, textarea
輸入特性, 那麼使用 ctrl + a
或 command + a
(mac) 就會給你選中裏面的文本元素.contenteditable
會讓用戶的按鍵屬性出現編輯行爲, 因此使用了keydown事件檢查, 只容許 ctrl + a
和 command + a
兩種組合鍵經過默認行爲. 其他行爲均阻止瀏覽器默認行爲.DEMO html
默認屬性: false
可選屬性: true | falsejava
HTML5 引入的新屬性web
默認屬性: auto;
可選屬性: none | text | all | element;segmentfault
.disable-select { user-select: none; -webkit-select: none; }