지난번에 테이블 정렬을 하면서 테이블에 대한 이해를 좀 얻었는데, 이번에 좀 더 자세히 알아보고 테이블이 너무 복잡하다는 걸 알게 됐어요.
아직 이 효과를 뭐라고 부르는지 모르겠습니다. 그냥 행 위치 지정이라고 부르겠습니다. 원래는 열 위치 지정을 하고 싶었는데 아직은 시간이 나면 해봐야겠습니다.
프로그램 원리
초기 요구 사항은 스크롤할 때 시계의 헤드 부분이 항상 헤드에 고정될 수 있어야 한다는 것입니다. 달성해야 할 핵심은 tr의 위치를 가능하게 하는 것입니다.
가장 먼저 떠오르는 것은 tr에 대한 상대 설정을 설정하고 ie6/7에서 다음 코드를 테스트하는 것입니다.
[Ctrl A 모두 선택 참고: 외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다. ]
이후 tr을 기준으로 설정 테이블을 기준으로 위치를 지정하는 것은 매우 간단해 보이지만 문제는 이 방법이 ie8과 ff 모두에 유효하지 않고 문제가 많아 금방 포기했다는 점입니다.
ps: 이 효과는 tr을 드래그할 때 매우 편리합니다.
다음으로 제가 생각한 것은 테이블에 새 tr을 삽입하고 원본 tr을 복제한 다음 이 tr을 고정(예: 6은 절대)으로 설정하는 것이었습니다. 예를 들면 다음과 같습니다.
코드
[Ctrl A 모두 선택 참고: 외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다. ]
첫 번째 문제가 해결되었습니다. IE7에서는 tr을 배치할 수 없고, td도 배치한 후 테이블의 레이아웃을 유지할 수 없으므로 원본 테이블에 tr을 삽입하는 것은 의미가 없습니다.
ps: 고정 관련 응용프로그램은 모조 라이트박스 효과를 참조하세요.
제가 사용한 마지막 방법은 새 테이블을 만들고 소스 tr을 새 테이블에 복제한 다음 새 테이블을 배치하여 효과를 얻는 것이었습니다.
이 방법을 사용하는 데 있어 두 가지 핵심 사항이 있습니다. 첫째, 가능한 최고 수준의 TR을 만들어야 하며, 둘째, 이에 대한 정확한 위치 지정이 필요합니다.
절차 설명
【클론 테이블】
요소를 복제하려면 cloneNode를 사용하면 됩니다. 여기에는 복제본에 하위 노드가 포함되어 있는지 여부를 나타내는 bool 매개변수가 있습니다.
프로그램의 첫 번째 단계는 원본 테이블을 복제하는 것입니다.
this._nTable = this._oTable.cloneNode(false);//새 테이블
이것._nTable.id = "";//ID 충돌 방지
ie의 cloneNode 매개변수는 선택사항(기본값은 false)이지만 ff에서는 필수 매개변수로 사용할 때 매개변수를 작성하는 것이 좋습니다.
또한 id 속성도 복제된다는 점에 유의하세요. 즉, 복제 후 동일한 ID를 가진 요소가 두 개 있게 되며(복제 개체가 설정된 경우) 프로그램이 쉽게 다른 문제를 복제할 수 있습니다. 테이블 id 속성을 비워 둡니다.
ps: 클래스를 사용하여 스타일을 테이블에 바인딩하세요. ID를 사용하면 새 테이블에서 스타일을 얻을 수 없습니다.
복제 후 스타일 설정:
이._style.position = isIE6 ? "절대" : "수정됨";
이것._style.zIndex = 100;
일반적으로 offsetWidth는 너비 패딩 테두리의 결과이지만 테이블은 특별합니다.
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
只要给table设置width(style或本身的width属性),不管设置padding和border是多少,offsetWidth都等于width的值。
经测量offsetWidth是没错的,那就是说是table的width设置的问题。
w3c的table部分中说width属性是the desired width of the entire table,我估计entire就是包含了padding和border,找不到什么其他说明,先这么理解吧。
定位方面,除了不支持fixed的ie6用absolute,其他都使用fixed定位。
【克隆tr】
table有一个rows集合,包括了table的所有tr(包括thead和tfoot里面的)。
程序的Clone方法会根据其参数克隆对应索引的tr:
this._oRow = this._oTable.rows[this._index];
var oT = this._oRow, nT = oT.cloneNode(true);
由于tr可能是包含在thead这些中,所以还要判断一下:
nT = oT.parentNode.cloneNode(false).appendChild(nT).parentNode;
}
然后再插入到新table中:
this._nTable.replaceChild(nT, this._nTable.firstChild);
}else{
this._nTable.appendChild(nT);
}
프로그램에서는 복제된 tr의 수정을 허용하므로 삽입되었는지 여부를 확인합니다. 그렇지 않은 경우에는 직접 추가하고, 그렇지 않으면 원래 tr을 replacementChild로 바꿉니다.
[테이블의 테두리 및 프레임 속성]
테이블의 border 속성은 테두리 너비를 지정하는 데 사용되며, 테이블별 프레임 속성은 테이블 주위의 테두리 표시 방법을 설정하거나 가져오는 데 사용됩니다.
w3c 레이블 의 프레임 부분은 프레임이 다음 값을 가질 수 있음을 나타냅니다.
void: 측면 없음
위의 값입니다. : 위쪽만
아래: 아래쪽만.
hsides: 위쪽과 아래쪽만.
lhs: 왼쪽만.
rhs: 오른쪽만
box: 네 면 모두
border: 네 면 모두
표시할 테두리를 지정합니다. 주의할 점은 void가 기본값이지만, 설정하지 않으면 실제로는 null 값이 되어 4개의 테두리가 모두 표시된다는 점에 유의해야 합니다.
또한 프레임은 스타일에 의해 설정된 테두리에 영향을 주지 않습니다.
[Ctrl A 모두 선택 참고: 외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다. ]
더 아름답게 만들기 위해 프로그램은 프레임과 스타일을 포함하여 새 테이블 위와 아래의 테두리를 자동으로 제거합니다.
코드
switch(this._oTable.frame ) {
case "위" :
case "아래" :
case "hsides" :
this._nTable.frame = "void";
case "" :
case "border" :
case "box" :
this._nTable.frame = "vsides"; break
}
}
this._style.borderTopWidth = this._style. borderBottomWidth = 0;
collapse 설정 후 null 값이 더 문제가 됩니다. ie6/ie7에서 테스트됨:
코드
[Ctrl A 모두 선택 참고: 외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다 ]
마지막 두 개는 변환이 허용되므로 프레임을 설정하기 전에 테두리를 판단하는 것이 좋습니다.
[배경색 구하기]
TD의 배경이 투명하다면 당연히 보기 좋지 않을 것입니다. 채우기에 적합한 색상을 찾는 것이 가장 좋습니다.
프로그램에서 사용하는 방법은 현재 td에서 검색을 시작하는 것입니다. 배경이 투명하면 배경색을 찾을 때까지 상위 노드에서 검색합니다.
일반적으로 투명 속성 값은 "transparent"이지만 Chrome에서는 "rgba(0, 0, 0, 0)"이므로 투명 값을 저장하기 위해 속성을 사용합니다.
this._transparent = isChrome ? 0)" : "transparent";
GetBgColor에서 이를 사용하여 배경색 프로그램을 가져옵니다.
while (bgc == this._transparent && (node = node.parentNode) != document) {
bgc = CurrentStyle( node).BackgroundColor;
}
return bgc == this._transparent ? "#fff" : bgc;
모든 것이 투명하면 흰색(#fff)이 반환됩니다.
여기서는 이미지의 배경을 고려하지 않습니다. 결국 이미지가 배경 전체를 덮을 수는 없습니다.
[parentNode/offsetParent/parentElement]
위에서는 ParentNode를 사용했는데, offsetParent 및 parentElement와의 차이점에 대해 이야기해 보겠습니다.
우선 w3c의 parentNode 설명을 살펴보세요:
이 노드의 부모입니다. Document, DocumentFragment 및 Attr을 제외한 모든 노드는 부모를 가질 수 있습니다. , 노드가 방금 생성되었지만 아직 트리에 추가되지 않았거나 트리에서 제거된 경우 이는 null입니다.
매우 간단합니다. 노드의 상위 노드입니다. 본 DOM은 그것을 알고 있습니다.
구별하기 쉬운 offsetParent를 살펴보세요. Mozilla와 msdn에서는 모호하지만 w3c에서는 더 명확합니다.
offsetParent 속성(호출 시) 요소 A에서는 다음 알고리즘에 의해 결정된 요소를 반환해야 합니다.
1,다음 중 하나라도 true인 경우 null을 반환하고 이 알고리즘을 중지합니다.
A는 루트 요소입니다.
A는 HTML 본문입니다.
요소 A에 대한 위치 속성의 계산된 값은 고정됩니다.
2,A가 상위 체인 어딘가에 지도 HTML 요소가 있는 영역 HTML 요소인 경우 가장 가까운 상위 지도 HTML 요소를 반환하고 중지합니다. 이 알고리즘.
3, 다음 중 하나 이상이 true인 A의 가장 가까운 조상 요소를 반환하고 그러한 조상이 발견되면 이 알고리즘을 중지합니다.
위치 속성의 계산된 값이 정적이 아닙니다.
HTML 본문 요소입니다.
A의 위치 속성의 계산된 값은 정적이며 조상은 td, th 또는 table 중 하나입니다.
4,반환 null .
여기에는 네 가지 주요 사항이 있습니다.
1. 루트 요소, 본문 요소 또는 요소의 위치가 고정된 경우
2. 가장 가까운 지도 요소가 반환됩니다. ;
3, 다음 조건 중 하나 이상을 충족하는 노드에 가장 가까운 요소를 반환합니다. 1. 요소의 위치가 정적이 아닙니다. 2. 본문 요소입니다. 3. 소스 요소의 위치는 정적이며 조상 요소 중 다음 요소는 td, th 또는 table입니다.
4, null을 반환합니다.
세 번째 사항은 가장 일반적인 상황입니다. 자세한 내용은 아래 테스트를 참조하세요.
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
可见offsetParent跟parentNode的区别还是很大的。
而parentNode跟parentElement除了前者是w3c标准,后者只ie支持,其他的区别就不是那么明显了。
在ie中大部分情况下两者的效果是一样的,当然如果是一模一样的话ie就没必要弄这么一个东西出来了,测试下面的代码:
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
可以看到当父节点的nodeType不是1,即不是element节点的话,它的parentElement就会是null。
这就明白了名字中“Element”的含义了。
【设置td宽度】
接下来就要设置td宽度了,要获取某元素的宽度可以通过以下方法:
1,支持defaultView的可以直接用getComputedStyle获取width。
2,获取offsetWidth,再减去border和padding的宽度。
这个本来也可以,但td的border宽度的获取比较麻烦,下面有更方便的方法。
3,获取clientWidth,再减去padding的宽度。
这个跟方法2差不多,但更简单方便。
注意ie的currentStyle不像getComputedStyle能获取准确值,而只是一个设置值,像百分比、auto这些并不会自动转成准确值,即使是得到准确值也不一定是实际值,像td即使设置一个很大的准确值,实际值也不会超过table本身的宽度。
所以在td这种比较特殊的结构中,除非是很理想的状况,否则用currentStyle基本没戏,而且在这个效果中即使是差了1px也会看不舒服。
对于支持defaultView的当然可以直接获取,否则就用上面的方法3来获取:
: (o.clientWidth - parseInt(css.paddingLeft) - parseInt(css.paddingRight))) + "px";
그런데 여기서는 어떤 방법을 써도 스크롤이 발생한다는 문제가 있는데, 다행히 td 요소를 스크롤하도록 오버플로로 설정해도 ie8과 ie8을 제외하면 스크롤바가 나타나지 않습니다. 크롬.
결국 td에 대해 스크롤을 설정하는 것이 일반적이지 않으며 이를 지원하는 브라우저도 많지 않습니다. 여기에 너무 많은 시간을 소비할 필요는 없습니다.
ps: td 너비 자동 조정에 대해서는 w3c 의 테이블 레이아웃 부분을 참조하세요.
colspan과 같이 원래 td 구조에 영향을 미치는 설정이 있는 경우 잘못된 구조로 인해 비정상적인 변형이 발생할 수 있으므로 주의하시기 바랍니다.
원래 테이블의 구조나 내용이 수정된 경우 Clone 메소드를 실행하여 새 테이블을 재구성해야 합니다.
체험에 있어 더욱 중요한 부분입니다. 제대로 설정되지 않으면 변형된 느낌이 들어 매우 보기 흉합니다.
【국경붕괴】
위에서 td의 테두리 너비를 구하는 것이 번거롭다고 언급했는데, 얼마나 번거로운가요?
일반적인 경우라면 borderLeftWidth와 borderRightWidth를 통해 너비를 구하면 됩니다.
ps: borderStyle이 "none"이면 테두리가 유효하지 않으므로 테두리 너비를 얻으려면 먼저 borderStyle이 "none"인지 확인하는 것이 가장 좋습니다.
그러나 테이블에는 테이블의 테두리 모델을 설정하는 특별한 스타일의 borderCollapse가 있습니다.
분리(별도, 기본값)와 축소(병합)라는 두 가지 값이 있습니다.
우리가 일반적으로 보는 효과는 별개입니다. 여기서는 주로 축소에 대해 논의합니다. 먼저 mozilla가 말하는 내용을 살펴보겠습니다.
접힌 테두리 모델에서는 인접한 테이블 셀이 테두리를 공유합니다. .
은 접기 테두리 모델에서 인접한 td가 테두리를 공유한다는 것을 의미합니다. 다음 예를 보면 더 명확해질 것입니다.
[Ctrl A 모두 선택 참고: 외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다. ]
당신 Collapse를 사용한 후 인접한 TD의 경계가 하나로 병합되고 인접한 경계 중 너비가 더 큰 것이 우선한다는 것을 알 수 있습니다.
td와 table 사이는 어떻습니까? 다음 예를 참고하세요.
[Ctrl A 모두 선택 참고: 외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다. ]
표시 테이블과 td 사이에도 동일한 규칙을 따릅니다.
또 다른 점은 축소가 설정되면 셀 간격이 유효하지 않다는 것입니다. 그런데 테두리 간격은 실제로 CSS의 셀 간격 스타일 형식입니다. 자세한 내용은 mozilla 지침을 참조하세요.
collapse의 일반적인 적용은 1px 테두리가 있는 테이블과 같은 테두리 테이블을 만드는 것입니다.
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
前者用的collapse,后者是用table背景色模拟,虽然效果都一样,但前者显然较好,才是真正的“边框”。
在使用了collapse之后,要写一个通用的获取边框宽度程序会变得十分麻烦,而且有些情况下甚至没办法判断获取。
详细情况这里就不细说了,有兴趣研究的话可以看看w3c的The collapsing border model,当然要想全部了解的话还要在各个浏览器中研究。
【元素位置】
table的样式设置好后,还需要获取原table和原tr的位置参数,为后面的元素定位做准备。
要获取某个元素相对文档的位置,传统的做法是获取对象的offsetLeft/offsetTop,然后不断获取offsetParent的offsetLeft/offsetTop,直到找不到offsetParent为止。
得到的结果就是相对文档的位置了,上面已经介绍过offsetParent,原理应该都明白了吧。
程序的SetRect设置区域属性方法中也使用了这个思路:
//获取原table位置
var o = this._oTable, iLeft = o.offsetLeft, iTop = o.offsetTop;
while (o.offsetParent) { o = o.offsetParent; iLeft += o.offsetLeft; iTop += o.offsetTop; }
this._oTableLeft = iLeft;
this._oTableTop = iTop;
this._oTableBottom = iTop + this._oTableHeight;
//获取原tr位置
o = this._oRow; iTop = o.offsetTop;
while (o.offsetParent) { o = o.offsetParent; iTop += o.offsetTop; }
this._oRowTop = iTop;
this._oRowBottom = iTop + this._oRow.offsetHeight;
不过这里介绍一个更好的方法,通过getBoundingClientRect方法来获取。
在mozilla是这么说明的:
The returned value is a TextRectangle object, which contains read-only left, top, right and bottom properties describing the border-box, in pixels, with the top-left relative to the top-left of the viewport...
返回一个TextRectangle对象,包含left, top, right和bottom几个只读属性,以px为单位来表示边界框相对视窗左上角的位置。(偶英文烂啊)
注意是相对视窗,不是文档哦,如果要相对文档还必须加上scrollLeft/scrollTop。
通过下面的测试可以看到两个方法返回的结果都是相同的:
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
程序中如果支持getBoundingClientRect就会用它来获取位置参数:
//用getBoundingClientRect获取原table位置
var top = this._doc.scrollTop, rect = this._oTable.getBoundingClientRect();
this._oTableLeft = rect.left + this._doc.scrollLeft;
this._oTableTop = rect.top + top;
this._oTableBottom = rect.bottom + top;
//获取原tr位置
rect = this._oRow.getBoundingClientRect();
this._oRowTop = rect.top + top;
this._oRowBottom = rect.bottom + top;
显然用getBoundingClientRect更方便快捷。
这个方法虽然是ie的产物,但已经是w3c的标准,而且ff3和Opera都已经支持了这个方法,基本可以放心使用,除了chrome。
这里只是简单介绍,想了解更多可以看w3c的View Module部分。
获取原table和tr的位置后,还需要计算新table的位置。
程序可以自定义新table位于视窗位置的百分比,例如顶部是0,中间是0.5,底部是1,可以在程序初始化时或用SetPos方法来设置。
这里主要获取视窗高度和新table在视窗的top值:
this._ntViewTop = (this._viewHeight - this._nTableHeight) * this._pos;
定位范围实际上是从视框顶部到视框高度减去新table高度的范围内的,所以计算时要先把视窗高度减去新table的高度。
【元素定位】
万事俱备,只欠定位了。
由于要根据窗口滚动状态来判断计算定位,scrollTop/scrollLeft的获取必不可少。
但在chrome中就算用了DOCTYPE,也要用document.body来获取scrollTop/scrollLeft,尽管它确实有document.documentElement。
对chrome了解不多,也不知哪里能查它的相关文档,程序里就直接做个判断算了:
定位的第一步就是判断是否需要定位,这里的判断标准有两个,第一个是原tr是否超过了视窗范围,还有是新table要显示的位置是否在原table的显示范围内。
第一点可以通过原tr位置的顶部和底部是否超过视窗的顶部和底部来判断:
,outViewTop = this._oRowTop top, outViewBottom = this._oRowBottom > top + this._viewHeight;
if(outViewTop || outViewBottom){

在看第二点之前先看看程序中的Auto属性,它是用来指定否自动定位的。
如果自动定位的话当原tr离开视框顶部新table就会定位到视框顶部,原tr离开底部新table就会定位到视框底部,这样看上去会比较自然顺畅。
如果不选择自动的话就会根据SetPos方法中计算得到的新table视窗top值来设置定位:
: (outViewTop ? 0 : (this._viewHeight - this._nTableHeight))//视窗top
,posTop = viewTop + top;//位置top
接着就判断新table要显示的位置是否在原table的显示范围内,这个可以通过新table位置的顶部和底部是否超过原table的顶部和底部来判断:

当符合所有的条件就可以进行定位了,如果是fixed定位的就使用相对视窗的top值:
this._style.left = this._oTableLeft - left + "px";
예를 들어 ie6이 절대 위치에 있는 경우 상대 문서의 최상위 값을 사용해야 합니다.
이것._style.left = 이것._oTableLeft "px";
왼쪽과 오른쪽 스크롤을 고려하여 왼쪽도 설정해야 합니다.
물론 조건이 충족되지 않으면 프로그램은 간접적으로 "숨기기" 위해 top에 큰 음수 값을 설정합니다.
IE6 페이지를 늘리지 않기 때문에 음수 값을 사용합니다. 디스플레이를 사용하지 않는 이유는 위에서 오프셋 높이를 얻어야 하기 때문입니다.
마지막으로 창의 스크롤 이벤트에 실행 프로그램을 바인딩하면 창 크기가 조정될 때 뷰 프레임의 높이가 변경되므로 크기 조정 이벤트를 SetPos 프로그램에 바인딩해야 합니다.
【표지 선택】
포지셔닝을 사용하는 한, 오랜 라이벌인 "ie6의 셀렉트"와 맞서야 합니다.
이전 글에서도 몇 가지 해결 방법을 소개한 적이 있습니다(여기에서 오버레이 선택 참조). 여기에서는 선택을 직접 숨길 수 없으므로 iframe만 사용할 수 있는 것 같습니다. .
하지만 iframe에는 큰 문제가 있습니다. ie6에서 다음 코드를 테스트하고 스크롤 막대를 드래그하세요.
[Ctrl A 모두 선택 참고: 외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다. ]
iframe에서도 스크롤 막대를 드래그할 때 선택 항목이 여전히 그 뒤에서 깜박이는 것을 볼 수 있습니다. 이 현상은 이 프로그램에서 특히 두드러집니다.
선택 항목을 숨기는 방법을 사용해야 할 것 같습니다. 가장 좋은 방법은 다른 선택 항목의 일반적인 표시에 영향을 주지 않고 새 테이블 뒤에 선택 항목만 숨기는 것입니다.
핵심은 선택 항목이 새 테이블 뒤에 있는지 판단하는 방법입니다. 이는 위치 좌표로 판단할 수 있으며 위의 getBoundingClientRect를 사용할 수 있습니다.
일반적인 아이디어는 새 테이블의 좌표를 결정하고 선택하고, 위치에 따라 선택 항목의 표시 및 숨기기를 결정하는 것입니다.
그러나 인스턴스가 여러 개인 경우 한 인스턴스에서는 선택 항목이 숨겨지고 다른 인스턴스에서는 표시될 수 있습니다.
충돌을 해결하기 위해 프로그램은 선택 항목을 숨긴 인스턴스 수를 기록하는 카운터로 선택 항목에 _count 속성을 추가합니다.
현재 인스턴스가 선택 항목을 숨겨야 한다고 판단하면 _count에 1을 추가하고 숨긴 후 인스턴스의 _selects 컬렉션에 저장합니다.
_selects에서 선택 항목의 표시를 복원할 때 먼저 선택 항목의 _count를 1씩 감소시킵니다. 획득한 _count가 0이면 이를 숨길 다른 인스턴스가 없다는 의미이므로 표시를 설정할 수 있으며, 마지막으로 _selects 컬렉션을 지웁니다.
선택 항목을 숨길지 여부를 판단하기 전에 인스턴스의 _selects에서 선택 항목을 복원해야 합니다. 그렇지 않으면 _count가 증가하기만 하고 감소하지는 않습니다.
프로그램의 SetSelect 메소드는 선택을 결정하고 설정하는 데 사용됩니다.
this.ResetSelect();
var ect = this._nTable.getBoundingClientRect();
//숨겨야 할 항목을 _selects 컬렉션에 넣습니다.
this._selects = Filter(this ._oTable.getElementsByTagName("select"), Bind(this, function(o){
var r = o.getBoundingClientRect();
if(r.top o._count ? o._count : (o._count = 1);//여러 인스턴스 충돌 방지
//숨기기로 설정
var visi = o .style.visibility;
if(visi != "hidden"){ o._css = visi; o.style.visibility = "hidden" }
return
} >}) )
this._selects = [];
[Chrome 버그]
테스트 중 Chrome에서 버그를 발견하여 다음 코드를 테스트했습니다.
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
一个毫不相干的操作居然令table没有自动撑开,加上前面的问题,看来Chrome的路还很长啊。
使用说明
实例化一个TableFixed对象只需要一个参数table的id:
实例化时有4个可选属性:
Index: 0,//tr索引
Auto: true,//是否自动定位
Pos: 0,//自定义定位位置百分比(0到1)
Hide: false//是否隐藏(不显示)
其中Index和Pos在实例化之后就不能使用。
要修改克隆行可以用Clone方法,其参数是要克隆tr的索引。
要修改自定义定位位置可以用SetPos方法,其参数是要定位的位置百分比。
具体使用请参考实例。
프로그램 소스코드
[Ctrl A 모두 선택 참고: 외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다 ]
완전한 테스트 코드 다운로드
재인쇄 시 출처를 표기해주세요: http://www.cnblogs.com/cloudgamer/

javaScriptisNotBuiltoncorc; it'SangretedLanguageThatrunsonOngineStenWrittenInc .1) javaScriptWasDesignEdasAlightweight, 해석 hanguageforwebbrowsers.2) Endinesevolvedfromsimpleplemporectreterstoccilpilers, 전기적으로 개선된다.

JavaScript는 프론트 엔드 및 백엔드 개발에 사용할 수 있습니다. 프론트 엔드는 DOM 작업을 통해 사용자 경험을 향상시키고 백엔드는 Node.js를 통해 서버 작업을 처리합니다. 1. 프론트 엔드 예 : 웹 페이지 텍스트의 내용을 변경하십시오. 2. 백엔드 예제 : node.js 서버를 만듭니다.

Python 또는 JavaScript는 경력 개발, 학습 곡선 및 생태계를 기반으로해야합니다. 1) 경력 개발 : Python은 데이터 과학 및 백엔드 개발에 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 적합합니다. 2) 학습 곡선 : Python 구문은 간결하며 초보자에게 적합합니다. JavaScript Syntax는 유연합니다. 3) 생태계 : Python에는 풍부한 과학 컴퓨팅 라이브러리가 있으며 JavaScript는 강력한 프론트 엔드 프레임 워크를 가지고 있습니다.

JavaScript 프레임 워크의 힘은 개발 단순화, 사용자 경험 및 응용 프로그램 성능을 향상시키는 데 있습니다. 프레임 워크를 선택할 때 : 1. 프로젝트 규모와 복잡성, 2. 팀 경험, 3. 생태계 및 커뮤니티 지원.

서론 나는 당신이 이상하다는 것을 알고 있습니다. JavaScript, C 및 Browser는 정확히 무엇을해야합니까? 그들은 관련이없는 것처럼 보이지만 실제로는 현대 웹 개발에서 매우 중요한 역할을합니다. 오늘 우리는이 세 가지 사이의 밀접한 관계에 대해 논의 할 것입니다. 이 기사를 통해 브라우저에서 JavaScript가 어떻게 실행되는지, 브라우저 엔진의 C 역할 및 웹 페이지의 렌더링 및 상호 작용을 유도하기 위해 함께 작동하는 방법을 알게됩니다. 우리는 모두 JavaScript와 브라우저의 관계를 알고 있습니다. JavaScript는 프론트 엔드 개발의 핵심 언어입니다. 브라우저에서 직접 실행되므로 웹 페이지를 생생하고 흥미롭게 만듭니다. 왜 Javascr

Node.js는 크림 덕분에 효율적인 I/O에서 탁월합니다. 스트림은 메모리 오버로드를 피하고 큰 파일, 네트워크 작업 및 실시간 애플리케이션을위한 메모리 과부하를 피하기 위해 데이터를 점차적으로 처리합니다. 스트림을 TypeScript의 유형 안전과 결합하면 Powe가 생성됩니다

파이썬과 자바 스크립트 간의 성능과 효율성의 차이는 주로 다음과 같이 반영됩니다. 1) 해석 된 언어로서, 파이썬은 느리게 실행되지만 개발 효율이 높고 빠른 프로토 타입 개발에 적합합니다. 2) JavaScript는 브라우저의 단일 스레드로 제한되지만 멀티 스레딩 및 비동기 I/O는 Node.js의 성능을 향상시키는 데 사용될 수 있으며 실제 프로젝트에서는 이점이 있습니다.

JavaScript는 1995 년에 시작하여 Brandon Ike에 의해 만들어졌으며 언어를 C로 실현했습니다. 1.C Language는 JavaScript의 고성능 및 시스템 수준 프로그래밍 기능을 제공합니다. 2. JavaScript의 메모리 관리 및 성능 최적화는 C 언어에 의존합니다. 3. C 언어의 크로스 플랫폼 기능은 자바 스크립트가 다른 운영 체제에서 효율적으로 실행하는 데 도움이됩니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.