'Javascript'에 해당되는 글 14건

  1. 2011.11.14 순수 Javascript 로 get 방식으로 넘어온 파라메터 가져오기 2
  2. 2011.11.09 javascript Array 에 protoype으로 remove 함수 추가하기 2
  3. 2011.11.07 javascript 로 PC에서 접속했는지 모바일 기기에서 접속했는지 체크하기 6
  4. 2011.11.01 Javascript 문자열 바이트수 가져오기(byteLength) 1
  5. 2011.10.07 Firefox 이벤트 객체의 srcElement 참조하기

순수 Javascript 로 get 방식으로 넘어온 파라메터 가져오기


PHP,JSP,ASP 같은 서버사이드 스크립트 언어처럼 확실하게 파라메터를 가져온다는 장담은 못한다.


이게 쪽바로 작동하기 위한 전제조건은

브라우져 주소창 url에 파라메터 정보가 다 있어야 된다는 것이다. 왜냐하면 브라우져  주소창 url 을 파싱해서 파라메터 정보를 가져오기 때문에 -_-;

※ 순수하게 javascript로는 post 방식으로 넘긴 파라메터는 못가져올 것이라고 장담은 못하지만 아마 못가져오지 않을까라는 추정은 해본다 -_-




아무튼 자바스크립트 코드는 다음과 같다.
ex) 브라우져 주소창에 http://xxxxxxxx/paramTest.html?test1=a&test2=b  라고 접근했다고 가정.
<script>
	// 파라메터 정보가 저장될 오브젝트
	// common.js 같은 모든 페이지에서 로딩되는 js 파일에 넣어두면 됨.
	var getParam = function(key){
		var _parammap = {};
		document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function () {
			function decode(s) {
				return decodeURIComponent(s.split("+").join(" "));
			}

			_parammap[decode(arguments[1])] = decode(arguments[2]);
		});

		return _parammap[key];
	};


	alert("test1 : " + getParam("test1"));  // a
</script>


javascript Array 에 protoype으로 remove 함수 추가하기



요상스럽게도 자바스크립트 배열 객체에는 배열상의 특정 인덱스에 있는 엘리먼트를 삭제하는 remove(index) 요런 함수가 없다.

뭔 이유가 있으니까 안 맨들어 놨겠지만 개발을 하다보면 죠런 함수가 간절하게 필요한 경우가 있다.




prototype 을 이용해 Array 객체에 remove() 함수를 추가해 보자.
Array.prototype.remove = function(idx) {
	return (idx<0 || idx>this.length) ? this : this.slice(0, idx).concat(this.slice(idx+1, this.length));
};



죠걸 모든 페이지에서 공통적으로 포함시키는 common.js 같은 js 파일에 추가하면 배열 객체에서 remove() 함수를 쓸 수 있게 된다.
// 테스트
var arr = ["a", "b", "c", "d"];

console.log(arr.remove(0));		// ["b", "c", "d"]

console.log(arr.remove(1));		// ["a", "c", "d"]

console.log(arr.remove(2));		// ["a", "b", "d"]

console.log(arr.remove(3));		// ["a", "b", "c"]

console.log(arr.remove(4));		// ["a", "b", "c", "d"]

console.log(arr.remove(-1));	// ["a", "b", "c", "d"]




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>

prev 1 2 3 next