'Javascript'에 해당되는 글 17건

  1. 2011.11.07 javascript 로 PC에서 접속했는지 모바일 기기에서 접속했는지 체크하기 6
  2. 2011.11.01 Javascript 문자열 바이트수 가져오기(byteLength) 1
  3. 2011.10.07 Firefox 이벤트 객체의 srcElement 참조하기
  4. 2011.09.28 Javascript Timer setTimeout(), setInterval() 함수 나름 새로운 사용법 -_-
  5. 2011.09.09 Javascript Date format 함수 11

javascript 로 PC에서 접속했는지 모바일 기기에서 접속했는지 체크하기


모바일 기기에서 접속했는지를 판단하기 위해서 대부분 request 헤더 정보에 포함된 user-agent 헤더를 읽어서 판단을 한다.

죠렇게 판단하는게 가장 무난스런 방법이지만 자바스크립트로도 간단스럽게 판단이 가능하다.

자바스크립트 내장객체 중 navigator 의 platform 프로퍼티를 이용하면 된다.



판단하는 코드는 다음과 같다.
<script type="text/javascript">
	var filter = "win16|win32|win64|mac";

	if( navigator.platform  ){
		if( filter.indexOf(navigator.platform.toLowerCase())<0 ){
			alert("모바일 기기에서 접속");
		}else{
			alert("PC에서 접속");
		}
	}
</script>






Javascript 문자열 바이트수 가져오기(byteLength)


문자열의 바이트 수를 리턴해 주는 함수를 String 의 prototype 으로 추가하면 간편하게 쓸 수 있다.
/**
 * 문자열의 바이트수 리턴
 * @returns {Number}
 */
String.prototype.byteLength = function() {
	var l= 0;
	
	for(var idx=0; idx < this.length; idx++) {
		var c = escape(this.charAt(idx));
		
		if( c.length==1 ) l ++;
		else if( c.indexOf("%u")!=-1 ) l += 2;
		else if( c.indexOf("%")!=-1 ) l += c.length/3;
	}
	
	return l;
};

"abc".byteLength();        // 3
"가나다".byteLength();      // 6
"가나다abc".byteLength();   // 9




 

Firefox 이벤트 객체의 srcElement 참조하기

IE나 크롬 기타등등 브라우져의 이벤트 객체에는 srcElement 프로퍼티가 있어서 이벤트가 발생한 엘리먼트가 어떤 엘리먼트인지 알 수 있다.

그런데 Firefox 에는 srcElement 프로퍼티가 없어서, 별다른 처리를 해 주지 않으면 스크립트 에러가 발생한다.


Firefox 의 이벤트 객체에는 srcElement 프로퍼티가 대신 target 프로퍼티가 있다.

srcElement 프로퍼티를 이용한 부분을 요렇게 바꾸면 모든 브라우져에서 스크립트 에러 없이 원하는 일을 할 수 있다.
function eventHandler(e){
	var el = e.srcElement ? e.srcElement : e.target;

	// el.tagName ......
}


간단한 응용 : 어떤 태그가 클릭됬는지 가져오기
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
	
	<script>
		function eventHandler(e){
			var el = e.srcElement ? e.srcElement : e.target;
			alert("클릭한 태그이름 : " + el.tagName);
		}
		document.onclick = eventHandler;
	</script>
</head>
<body>
	<h1>헤더1</h1>
	<h2>헤더2</h2>
</body>
</html>

Javascript Timer setTimeout(), setInterval() 함수 나름 새로운 사용법 -_-

setTimeout(fn, interval); 요함수는 interval 시간이 지난후에 fn 함수를 한번 실행시켜 주는 함수이다.

setInterval(fn, interval); 요함수는 interval 시간마다 fn 함수를 한번씩 실행시켜 주는 함수이다.



뭘 몰랐을때는 대부분 요렇게 호출될 함수를 따로 맹글어서 사용했다.
// 1초 뒤 timerTest() 함수 실행
setTimeout("timerTest()", 1000);

function timerTest(){
	alert("-_-凸");
}




하지만 요래도 사용이 가능한걸 오늘에서야 알게 되었다 -_-;;
// 위 예제와 동일한 작동을 함
setTimeout(function(){
	alert("-_-凸1");
}, 1000);


요렇게 사용할 수 있게 됨으로서 그동안 쫌 이상하게 코딩해야 했던 부분들을 쪼매 더 간결스럽게 코딩할수 있게 된것 같기도 하다.

역시 아는것이 힘인것 같다. 별건 아니지만..

Javascript Date format 함수

Date.prototype.format = function(f) {
	if (!this.valueOf()) return " ";

	var weekName = ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"];
	var d = this;
	
	return f.replace(/(yyyy|yy|MM|dd|E|hh|mm|ss|a\/p)/gi, function($1) {
		switch ($1) {
			case "yyyy": return d.getFullYear();
			case "yy": return (d.getFullYear() % 1000).zf(2);
			case "MM": return (d.getMonth() + 1).zf(2);
			case "dd": return d.getDate().zf(2);
			case "E": return weekName[d.getDay()];
			case "HH": return d.getHours().zf(2);
			case "hh": return ((h = d.getHours() % 12) ? h : 12).zf(2);
			case "mm": return d.getMinutes().zf(2);
			case "ss": return d.getSeconds().zf(2);
			case "a/p": return d.getHours() < 12 ? "오전" : "오후";
			default: return $1;
		}
	});
};

String.prototype.string = function(len){var s = '', i = 0; while (i++ < len) { s += this; } return s;};
String.prototype.zf = function(len){return "0".string(len - this.length) + this;};
Number.prototype.zf = function(len){return this.toString().zf(len);};


Example!
//2011년 09월 11일 오후 03시 45분 42초
console.log(new Date().format("yyyy년 MM월 dd일 a/p hh시 mm분 ss초"));

//2011-09-11
console.log(new Date().format("yyyy-MM-dd"));

//'11 09.11
console.log(new Date().format("'yy MM.dd"));

//2011-09-11 일요일
console.log(new Date().format("yyyy-MM-dd E"));

//현재년도 : 2011
console.log("현재년도 : " + new Date().format("yyyy"));
prev 1 2 3 4 next