复制代码代码如下:
<стиль><!--
body {padding-top:50px;padding-left:100px;padding-right:150px;}
.fileDiv{float:left;ширина:100px;высота:100px;text-align:center;line-height:100px;font-size:12px;border:1px Solid #cccccc;margin-right:10px;margin-bottom: 10 пикселей;}
.seled{border:1px Solid #ff0000;background-color:#D6DFF7;}
--></стиль>
<script type="text/javascript">// <![CDATA[
Array.prototype.remove = функция(элемент){
for(var я = 0; я <this.length; я++){
если (элемент == это [i])
перерыв;
}
если (я == this.length)
возвращаться;
for(var j = i; j < this.length - 1; j++){
это[ j ] = это [ j + 1 ];
}
this.length--;
}
String.prototype.replaceAll = функция (AFindText,ARepText) { raRegExp = новый RegExp(AFindText,"g"); return this.replace(raRegExp,ARepText);}
функция getAllChildren(e) {
вернуть все? e.all : e.getElementsByTagName('*');
}
document.getElementsBySelector = функция (селектор) {
если (!document.getElementsByTagName) {
вернуть новый массив();
}
var tokens = selector.split(' ');
вар currentContext = новый массив (документ);
for (var i = 0; i < tokens.length; i++) {
token = tokens[i].replace(/^/s+/,'').replace(//s+$/,'');;
если (token.indexOf('#') > -1) {
var биты = token.split('#');
вар tagName = биты [0];
вар идентификатор = биты [1];
элемент вар = document.getElementById(id);
if (tagName && element.nodeName.toLowerCase() != tagName) {
вернуть новый массив();
}
currentContext = новый массив (элемент);
продолжать;
}
если (token.indexOf('.') > -1) {
var bits = token.split('.');
вар tagName = биты [0];
вар имя класса = биты [1];
если (!tagName) {
имя_тега = '*';
}
вар найден = новый массив;
вар FoundCount = 0;
for (var h = 0; h < currentContext.length; h++) {
элементы вар;
если (tagName == '*') {
элементы = getAllChildren(currentContext[h]);
} еще {
элементы = currentContext[h].getElementsByTagName(tagName);
}
for (var j = 0; j < elements.length; j++) {
Found[foundCount++] = элементы[j];
}
}
текущийКонтекст = новый массив;
вар currentContextIndex = 0;
for (var k = 0; k <found.length; k++) {
if (found[k].className && Found[k].className.match(new RegExp('//b'+className+'//b'))) {
currentContext[currentContextIndex++] = найдено[k];
}
}
продолжать;
}
if (token.match(/^(/w*)/[(/w+)([=~/|/^/$/*]?)=?"?([^/]"]*)"?/ ]$/)) {
вар tagName = RegExp.$1;
вар attrName = RegExp.$2;
вар attrOperator = RegExp.$3;
вар attrValue = RegExp.$4;
если (!tagName) {
имя_тега = '*';
}
вар найден = новый массив;
вар FoundCount = 0;
for (var h = 0; h < currentContext.length; h++) {
элементы вар;
если (tagName == '*') {
элементы = getAllChildren(currentContext[h]);
} еще {
элементы = currentContext[h].getElementsByTagName(tagName);
}
for (var j = 0; j < elements.length; j++) {
Found[foundCount++] = элементы[j];
}
}
текущийКонтекст = новый массив;
вар currentContextIndex = 0;
вар checkFunction;
переключатель (attrOperator) {
случай '=':
checkFunction = function(e) { return (e.getAttribute(attrName) == attrValue); };
перерыв;
случай '~':
checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('//b'+attrValue+'//b'))); };
перерыв;
случай '|':
checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); };
перерыв;
случай '^':
checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); };
перерыв;
случай '$':
checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); };
перерыв;
случай '*':
checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); };
перерыв;
по умолчанию :
checkFunction = function(e) { return e.getAttribute(attrName); };
}
текущийКонтекст = новый массив;
вар currentContextIndex = 0;
for (var k = 0; k <found.length; k++) {
если (checkFunction(found[k])) {
currentContext[currentContextIndex++] = найдено[k];
}
}
продолжать;
}
имя_тега = токен;
вар найден = новый массив;
вар FoundCount = 0;
for (var h = 0; h < currentContext.length; h++) {
элементы var = currentContext[h].getElementsByTagName(tagName);
for (var j = 0; j < elements.length; j++) {
Found[foundCount++] = элементы[j];
}
}
текущийКонтекст = найден;
}
вернуть текущийконтекст;
}
функция addEvent(eventType,eventFunc,eventObj){
eventObj = eventObj || документ;
if(window.attachEvent) eventObj.attachEvent("on"+eventType,eventFunc);
if(window.addEventListener) eventObj.addEventListener(eventType,eventFunc,false);
}
функция ClearEventBubble(evt){
эвт = эвт || окно.событие;
если (evt.stopPropagation) evt.stopPropagation(); еще evt.cancelBubble = true;
если (evt.preventDefault) evt.preventDefault(); еще evt.returnValue = ложь;
}
функция posXY(событие){
событие = событие || окно.событие;
var posX = event.pageX || (событие.clientX +
(document.documentElement.scrollLeft || document.body.scrollLeft));
var posY = event.pageY || (событие.клиентY +
(document.documentElement.scrollTop || document.body.scrollTop));
вернуть {x:posX, y:posY};
}
вар _selectedRegions = [];
функция RegionSelect(selRegionProp){
this.regions =[];
var _regions = document.getElementsBySelector(selRegionProp["region"]);
if(_regions && _regions.length > 0){
вар _self = это;
for(var i=0; i< _regions.length;i++){
_regions[i].onmousedown = функция(){
вар evt = window.event || аргументы[0];
if(!evt.shiftKey && !evt.ctrlKey){
// 清空所有select样式
_self.clearSelections(_regions);
this.className += " "+_self.selectedClass;
// выбор выбранных элементов, выбор метода select中的元素
_selectedRegions = [];
_selectedRegions.push(это);
}еще{
if(this.className.indexOf(_self.selectedClass) == -1){
this.className += " "+_self.selectedClass;
_selectedRegions.push(это);
}еще{
this.className = this.className.replaceAll(_self.selectedClass,"");
_selectedRegions.remove(это);
}
}
ClearEventBubble (евт);
}
this.regions.push(_regions[i]);
}
}
this.selectedClass = selRegionProp["selectedClass"];
this.selectedRegion = [];
this.selectDiv = ноль;
this.startX = ноль;
this.startY = ноль;
}
RegionSelect.prototype.select = функция(){
вар _self = это;
addEvent("mousedown",function(){
вар evt = window.event || аргументы[0];
_self.onBeforeSelect(evt);
ClearEventBubble (евт);
},документ);
addEvent("mousemove",function(){
вар evt = window.event || аргументы[0];
_self.onSelect(евт);
ClearEventBubble (евт);
},документ);
addEvent("mouseup",function(){
_self.onEnd();
},документ);
}
RegionSelect.prototype.onBeforeSelect = function(evt){
if(!document.getElementById("selContainer")){
this.selectDiv = document.createElement("div");
this.selectDiv.style.cssText = "position:absolute;width:0px;height:0px;font-size:0px;margin:0px;padding:0px;border:1px пунктирный #0099FF;background-color:#C3D5ED;z -индекс: 1000; фильтр: альфа (непрозрачность: 60); непрозрачность: 0,6; отображение: нет;";
this.selectDiv.id = "selContainer";
document.body.appendChild(this.selectDiv);
}еще{
this.selectDiv = document.getElementById("selContainer");
}
this.startX = posXY(evt).x;
this.startY = posXY(evt).y;
this.isSelect = правда;
}
RegionSelect.prototype.onSelect = функция(evt){
вар _self = это;
если (_self.isSelect) {
if(_self.selectDiv.style.display == "none") _self.selectDiv.style.display = "";
вар posX = posXY(evt).x;
вар poxY = posXY(evt).y;
_self.selectDiv.style.left = Math.min(posX, this.startX);
_self.selectDiv.style.top = Math.min(poxY, this.startY);
_self.selectDiv.style.width = Math.abs(posX - this.startX);
_self.selectDiv.style.height = Math.abs(poxY - this.startY);
вар RegionList = _self.regions;
for(var i=0; i<regionList.length; i++){
var r = RegionList[i], sr = _self.innerRegion(_self.selectDiv,r);
if(sr && r.className.indexOf(_self.selectedClass) == -1){
r.className = r.className + " "+_self.selectedClass;
_selectedRegions.push(r);
}else if(!sr && r.className.indexOf(_self.selectedClass) != -1){
r.className = r.className.replaceAll(_self.selectedClass,"");
_selectedRegions.remove(r);
}
}
}
}
RegionSelect.prototype.onEnd = функция(){
если (this.selectDiv) {
this.selectDiv.style.display = "нет";
}
this.isSelect = ложь;
//_selectedRegions = this.selectedRegion;
}
// 判断一个区域是否在选择区内
RegionSelect.prototype.innerRegion = функция (selDiv, регион) {
вар s_top = parseInt(selDiv.style.top);
вар s_left = parseInt(selDiv.style.left);
вар s_right = s_left + parseInt(selDiv.offsetWidth);
вар s_bottom = s_top + parseInt(selDiv.offsetHeight);
вар r_top = parseInt(region.offsetTop);
вар r_left = parseInt(region.offsetLeft);
вар r_right = r_left + parseInt(region.offsetWidth);
вар r_bottom = r_top + parseInt(region.offsetHeight);
вар т = Math.max(s_top, r_top);
вар г = Math.min(s_right, r_right);
вар b = Math.min(s_bottom, r_bottom);
вар l = Math.max(s_left, r_left);
if (b > t+5 && r > l+5) {
регион возврата;
} еще {
вернуть ноль;
}
}
RegionSelect.prototype.clearSelections = функция(регионы){
for(var i=0; i<regions.length;i++){
регионы[i].className = регионы[i].className.replaceAll(this.selectedClass,"");
}
}
функция getSelectedRegions(){
вернуть _selectedRegions;
}
функция showSelDiv(){
вар selInfo = "";
вар arr = getSelectedRegions();
for(var i=0; i<arr.length;i++){
selInfo += arr[i].innerHTML+"/n";
}
alert("共选择 "+arr.length+" 个文件,分别是:/n"+selInfo);
}
// ]]></script>
<p><button onclick="showSelDiv();">getRegions</button></p>
<div>файл1</div>
<div>файл2</div>
<div>файл3</div>
<div>файл4</div>
<div>файл5</div>
<div>файл6</div>
<div>файл7</div>
<div>файл8</div>
<div style="float: left; width: 100%;"><button onclick="showSelDiv();">getRegions</button></div>
<script type="text/javascript">// <![CDATA[
новый RegionSelect({
регион:'div.fileDiv',
selectedClass: 'селед'
}).выбирать();
// ]]></script>