<?xml version="1.0" encoding="utf-8" ?>
<rss xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:activity="http://activitystrea.ms/spec/1.0/" version="2.0">
<channel>
<title><![CDATA[Cginjs &amp;gt; C.m.A Lib &amp;gt; 자료실]]></title>
<link>http://cginjs.com/datatip</link>
<description><![CDATA[자료실]]></description>
<language>ko</language>
<pubDate>Sat, 07 Mar 2026 23:52:33 +0900</pubDate>
<lastBuildDate>Sat, 07 Mar 2026 23:52:33 +0900</lastBuildDate>
<generator>Cginjs</generator>
<copyright><![CDATA[Cginjs]]></copyright>
<image>
<url><![CDATA[http://cginjs.com/data/common/logo_img]]></url>
<title><![CDATA[Cginjs]]></title>
<link>http://cginjs.com</link>
</image>
<item>
<author>최고관리자</author>
<category><![CDATA[Javascript]]></category>
<title>textarea 현재커서 위치에 내용 삽입</title>
<link>http://cginjs.com/datatip/132</link>
<description><![CDATA[<pre class="prettyprint lang-js linenums notranslate pre-word-wrap pretty-total-20">&lt;script&gt;
function cursorPosInsert(obj, str) {
	var $textarea = $(obj);
	$textarea.focus();
	
	// 현재 커서 위치 파악 및 내용 삽입
	var selection = window.getSelection();
	var range = $textarea[0].setSelectionRange ? {
		start: $textarea[0].selectionStart,
		end: $textarea[0].selectionEnd
	} : document.selection.createRange();

	var svalue = $textarea.val();
	$textarea.val(svalue.substring(0, range.start) + str + svalue.substring(range.end));
	
	// 삽입 후 커서 위치 조정
	var newCursorPos = range.start + str.length;
	$textarea[0].setSelectionRange(newCursorPos, newCursorPos);
}
&lt;/script&gt;</pre><pre class="prettyprint lang-html linenums notranslate pre-word-wrap pretty-total-4">&lt;textarea class="frm_input frm_ex_textarea" rows="10" placeholder="내용을 입력하세요" style="width:100%; height:300px; margin: 2px 0;"&gt;
textarea 현재커서에 내용 삽입
&lt;/textarea&gt;
&lt;button type="button" class="btn" onclick="cursorPosInsert('.frm_ex_textarea', 'cginjs');" style="width:100%;"&gt;내용 삽입&lt;/button&gt;</pre>]]></description>
<dc:creator>최고관리자</dc:creator>
<dc:language>ko</dc:language>
<dc:date>Fri, 06 Mar 2026 18:10:59 +0900</dc:date>
</item>
<item>
<author>최고관리자</author>
<category><![CDATA[Javascript]]></category>
<title>백스페이스 : 커서 위치에서 삭제</title>
<link>http://cginjs.com/datatip/131</link>
<description><![CDATA[<p>&lt;pre class="prettyprint lang-js linenums notranslate pre-word-wrap pretty-total-17" data-li_to="17" data-wrap="pre-word-wrap" data-lang="js"&gt;&amp;lt;script&amp;gt;</p><p>function backspaceAtCursor(obj) {</p><p><span style="white-space:normal;"><span style="white-space:pre;">	</span>var $input = $(obj);</span></p><p><span style="white-space:normal;"><span style="white-space:pre;">	</span>var start = $input[0].selectionStart;</span></p><p><span style="white-space:normal;"><span style="white-space:pre;">	</span>var end = $input[0].selectionEnd;</span></p><p><br /></p><p><span style="white-space:normal;"><span style="white-space:pre;">	</span>// 텍스트가 선택되어 있다면 선택된 텍스트 삭제, 아니면 하나 앞 문자 삭제</span></p><p><span style="white-space:normal;"><span style="white-space:pre;">	</span>if (start === end &amp;amp;&amp;amp; start &amp;gt; 0) {</span></p><p><span style="white-space:normal;"><span style="white-space:pre;">		</span>$input.val( $input.val().slice(0, start - 1) + $input.val().slice(end) );</span></p><p><span style="white-space:normal;"><span style="white-space:pre;">		</span>$input.selectionStart = $input[0].selectionEnd = start - 1;</span></p><p><span style="white-space:normal;"><span style="white-space:pre;">	</span>} else {</span></p><p><span style="white-space:normal;"><span style="white-space:pre;">		</span>$input.val( $input.val().slice(0, start) + $input.val().slice(end) );</span></p><p><span style="white-space:normal;"><span style="white-space:pre;">		</span>$input.selectionStart = $input[0].selectionEnd = start;</span></p><p><span style="white-space:normal;"><span style="white-space:pre;">	</span>}</span></p><p><span style="white-space:normal;"><span style="white-space:pre;">	</span>$input.focus();</span></p><p>}</p><p>&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;pre class="prettyprint lang-html linenums notranslate pre-word-wrap pretty-total-2" data-li_to="2" data-wrap="pre-word-wrap" data-lang="html"&gt;&amp;lt;input type="text" id="ex_text" class="frm_input" value="커서 위치에서 삭제" style="width:80%;" /&amp;gt;</p><p>&amp;lt;button type="button" class="btn" onclick="backspaceAtCursor('#ex_text');"&amp;gt;backspace&amp;lt;/button&amp;gt;&lt;/pre&gt;</p>]]></description>
<dc:creator>최고관리자</dc:creator>
<dc:language>ko</dc:language>
<dc:date>Fri, 06 Mar 2026 18:01:06 +0900</dc:date>
</item>
<item>
<author>최고관리자</author>
<category><![CDATA[Javascript]]></category>
<title>Textarea Tab 들여쓰기 구현</title>
<link>http://cginjs.com/datatip/130</link>
<description><![CDATA[<pre class="prettyprint lang-html linenums notranslate pre-word-wrap pretty-total-1">&lt;textarea class="frm_input frm_ex_textarea" rows="10" placeholder="내용을 입력하세요" style="width:100%; height:300px;"&gt;&lt;/textarea&gt;</pre><pre class="prettyprint lang-js linenums notranslate pre-word-wrap pretty-total-26">&lt;script&gt;
$(function(e){
	$(document).on('keydown', 'textarea.frm_ex_textarea', function(e) {
		if (e.keyCode === 9) { // Tab 키 코드
			e.preventDefault(); // 기본 탭 동작(포커스 이동) 방지
			var $domTextArea = $(this)[0];
			var start = $domTextArea.selectionStart, end = $domTextArea.selectionEnd;
			var value = $domTextArea.value;
			var selectedText = value.substring(start, end);// 선택된 텍스트
			var tab = "    "; // 4개 공백 또는 '\t' 문자

			// 블록 지정된 경우, 각 라인마다 탭 추가 (선택 사항)
			if (selectedText.includes('\n')) {
				var lines = selectedText.split('\n');
				var indentedText = lines.map(function(line) {
					return tab + line;
				}).join('\n');
				$domTextArea.setRangeText(indentedText, start, end, 'select');
			} else {
				// 단일 라인 또는 공백 1개 삽입
				$domTextArea.setRangeText(tab, start, end, 'end');
			}
		}
	});
});
&lt;/script&gt;</pre>]]></description>
<dc:creator>최고관리자</dc:creator>
<dc:language>ko</dc:language>
<dc:date>Thu, 05 Mar 2026 19:08:29 +0900</dc:date>
</item>
<item>
<author>최고관리자</author>
<category><![CDATA[Javascript]]></category>
<title>특정  div 영역  fullscreen 지정</title>
<link>http://cginjs.com/datatip/129</link>
<description><![CDATA[<p></p><pre class="prettyprint lang-css linenums notranslate pre-word-wrap pretty-total-15">&lt;style&gt;
.content_box{position: relative; padding:5px;}
.content_box textarea{width:100%; height:200px;}
.content_box .btn_ex_fullscreen_cancel{display: none; width:100%; margin:5px; background:#ff0080; color:#fff;}
.btn_ex_fullscreen{display: inline-block; width:100%; margin:5px; }

.content_box.fullscreen {position: fixed; top: 0; left: 0; width: 100vw !important; height: 100vh !important; background:#090300; !important; z-index: 9999 !important;}
.content_box.fullscreen textarea{height:90%;}
.content_box.fullscreen .btn_ex_fullscreen_cancel{display: inline-block;}

/* 전체 화면 적용시 기본 레이아웃 css 컨트롤 아래는 자신에 맞게 알맞게 설정 */
body.fullscreen{} 
body.fullscreen #hd, 
body.fullscreen #hd_wrapper {display: none;}
&lt;/style&gt;</pre>
	<p></p><pre class="prettyprint lang-html linenums notranslate pre-word-wrap pretty-total-5">&lt;div class="content_box"&gt;
	&lt;textarea class="frm_input frm_textarea"&gt;&lt;/textarea&gt;
	&lt;button type="button" class="btn btn_ex_fullscreen_cancel"&gt;FullScreen 취소&lt;/button&gt;
&lt;/div&gt;
&lt;button type="button" class="btn btn_ex_fullscreen"&gt;FullScreen&lt;/button&gt;</pre><pre class="prettyprint lang-js linenums notranslate pre-word-wrap pretty-total-13 pretty-total-15">&lt;script&gt;
$(function(e) {
	$(document).on('click', '.btn_ex_fullscreen', function(e){ 
		$('.content_box').addClass('fullscreen');
		$('body').addClass('fullscreen');
		$('html, body').css('overflow', 'hidden');
	});

	$(document).on('click', '.content_box.fullscreen .btn_ex_fullscreen_cancel', function(e){ 
		$('.content_box').removeClass('fullscreen');
		$('body').removeClass('fullscreen');
		$('html, body').css('overflow', '');
	});
});
&lt;/script&gt;</pre><p>
	</p>]]></description>
<dc:creator>최고관리자</dc:creator>
<dc:language>ko</dc:language>
<dc:date>Mon, 02 Mar 2026 13:44:45 +0900</dc:date>
</item>
<item>
<author>최고관리자</author>
<category><![CDATA[WYSIWYG Editors]]></category>
<title>Summernote 에디터 설정 정보 가져오기</title>
<link>http://cginjs.com/datatip/128</link>
<description><![CDATA[<pre class="prettyprint lang-js linenums notranslate pre-word-wrap pretty-total-13">var context = $('#summernote').data('summernote'); /* summernote 에디터 설정 정보 가져오기 */
var ui = context.ui;
var $note = context.layoutInfo.note;
var $editor = context.layoutInfo.editor;
var $editable = context.layoutInfo.editable;
var $toolbar  = context.layoutInfo.toolbar;
var modules = context.modules;
var memos = context.memos;
var options = context.options;
var lang = options.langInfo;

console.log(options.height); // 300 출력
console.log(lang); // 'ko-KR' 출력</pre>]]></description>
<dc:creator>최고관리자</dc:creator>
<dc:language>ko</dc:language>
<dc:date>Fri, 20 Feb 2026 19:55:33 +0900</dc:date>
</item>
<item>
<author>최고관리자</author>
<category><![CDATA[WYSIWYG Editors]]></category>
<title>Summernote에서 전체 화면(Fullscreen) 모드 적용</title>
<link>http://cginjs.com/datatip/124</link>
<description><![CDATA[<p></p><pre class="prettyprint lang-js linenums notranslate pre-word-wrap pretty-total-6">// 기본 설정 (툴바 추가)
$('#summernote').summernote({
  toolbar: [
    ['view', ['fullscreen', 'codeview', 'help']] // 툴바에 fullscreen 추가
  ]
});</pre>
<p></p><pre class="prettyprint lang-js linenums notranslate pre-word-wrap pretty-total-8">// 자동 전체 화면 (초기화 시) : 페이지 로딩 시 바로 전체 화면으로 시작하려면 callback을 사용
$('#summernote').summernote({
  callbacks: {
    onInit: function() {
      $(this).summernote('fullscreen.toggle');
    }
  }
});</pre><pre class="prettyprint lang-js linenums notranslate pre-word-wrap pretty-total-20">// 전체 화면 적용시 기본 레이아웃 css 컨트롤을 위함
$(document).on('click', '.note-editor .note-toolbar .note-btn-group button.btn-fullscreen', function(e){ 
	var isFullscreen = $('#summernote').summernote('fullscreen.isFullscreen'); /* 전체화면 상태 체크 */
	//console.log('Is Fullscreen:', isFullscreen);
	
	if(isFullscreen == true) { // 전체화면 true 일때
		if( $('body').hasClass('summernote-fullscreen') === true ) {
			/* class 존재 */
		} else {
			$('body').addClass('summernote-fullscreen'); 
		}
	}
	if(isFullscreen == false) { // 전체화면 false 일때
		if( $('body').hasClass('summernote-fullscreen') === true ) {
			$('body').removeClass('summernote-fullscreen'); 
		} else {
			/* class X */
		}
	}
});</pre><pre class="prettyprint lang-css linenums notranslate pre-word-wrap pretty-total-10">.note-editor.note-frame.fullscreen {z-index: 9999 !important; background-color: white !important; height: 100vh !important;}
.note-editor.note-frame.fullscreen .note-toolbar{}
.note-editor.note-frame.fullscreen .note-toolbar .note-btn-group{}
.note-editor.note-frame.fullscreen .note-toolbar .note-btn-group button.btn-fullscreen{}
.note-editor.note-frame.fullscreen .note-editable { overflow-y: scroll !important; }

/* 전체 화면 적용시 기본 레이아웃 css 컨트롤 아래는 자신에 맞게 알맞게 설정 */
body.summernote-fullscreen{} 
body.summernote-fullscreen #hd, 
body.summernote-fullscreen #hd_wrapper {display: none;}</pre><p><br /></p><p><br /></p><p><br /></p>]]></description>
<dc:creator>최고관리자</dc:creator>
<dc:language>ko</dc:language>
<dc:date>Mon, 16 Feb 2026 13:23:28 +0900</dc:date>
</item>
<item>
<author>최고관리자</author>
<category><![CDATA[Javascript]]></category>
<title>네이티브 자바스크립트 Selection API 사용 블럭 지정된 텍스트 가져오기</title>
<link>http://cginjs.com/datatip/123</link>
<description><![CDATA[<pre class="prettyprint lang-js linenums notranslate pre-word-wrap pretty-total-40">&lt;script&gt;
$(function(e) {
	// 블럭 지정된 텍스트 가져오기
	$(document).on('mouseup', function(e) {
		var selection = window.getSelection();
		var selectedText = $.trim( selection.toString() ); // 선택된 텍스트를 문자열로 반환
		if (selectedText.length &gt; 0) {
			console.log('블럭 지정된 내용 : ' + selectedText);
		}
	});

	// 블럭 지정된 텍스트 강조(Highlight)하기
	$(document).on('mouseup', function(e) {
		var selection = window.getSelection();
		var selectedText = $.trim( selection.toString() );
		if (selectedText.length &gt; 0) {
			// 선택된 영역을 span 태그로 감싸고 하이라이트 클래스 적용
			var range = selection.getRangeAt(0);
			var span = document.createElement('span');
			span.style.backgroundColor = 'yellow';
			span.className = 'highlighted';
			range.surroundContents(span);
			selection.removeAllRanges();// 선택 해제
		}
	});

	// 특정 영역 내에서만 블럭 지정 감지
	$(document).on('mouseup', function(e){
		var selection = window.getSelection();
		var selectedText = $.trim( selection.toString() ); // 선택된 텍스트를 문자열로 반환
		var content_area = document.querySelector('.content_area');
		if (selectedText.length &gt; 0) {
			// selection.anchorNode는 사용자가 드래그를 시작한 노드
			if (content_area.contains(selection.anchorNode)) {
				console.log('블럭 지정된 내용 : ' + selectedText);
			}
		}
	});
});
&lt;/script&gt;</pre>]]></description>
<dc:creator>최고관리자</dc:creator>
<dc:language>ko</dc:language>
<dc:date>Sat, 14 Feb 2026 17:12:29 +0900</dc:date>
</item>
<item>
<author>최고관리자</author>
<category><![CDATA[WYSIWYG Editors]]></category>
<title>summernote 에디터에서 특정객체 hover시 tooltip 변경하기</title>
<link>http://cginjs.com/datatip/122</link>
<description><![CDATA[<p>summernote 에디터에서 특정객체 hover시 tooltip 변경하기<span style="white-space:normal;"></span></p><pre class="prettyprint lang-js linenums notranslate pre-word-wrap">// codeview 코드 보기 객체를 대상으로
$('.note-editor.note-frame .note-toolbar .note-btn-group.note-codeview button.note-btn.btn-codeview').hover(function(e){
	var $note_editor = $(this).closest('.note-editor.note-frame');
	if( $note_editor.hasClass('codeview') === true ) {
		var $note_tooltip = $note_editor.find('.note-tooltip.bottom.in');
		var $note_tooltip_content = $note_tooltip.find('.note-tooltip-content');
		$note_tooltip_content.html('코드 숨기기');
	} else {

	}
}, function(e) {

});</pre><p><span style="white-space:normal;"><br /></span></p><p><span style="white-space:normal;"><br /></span></p>]]></description>
<dc:creator>최고관리자</dc:creator>
<dc:language>ko</dc:language>
<dc:date>Fri, 30 Jan 2026 12:44:09 +0900</dc:date>
</item>
<item>
<author>최고관리자</author>
<category><![CDATA[Javascript]]></category>
<title>현재 브라우저의 로케일 가져오기</title>
<link>http://cginjs.com/datatip/121</link>
<description><![CDATA[<p>navigator.language: 브라우저의 기본 언어/로케일 (예: "ko-KR", "en-US")<br /><span style="font-size:1em;">navigator.languages: 사용자가 설정한 선호 언어 목록 (배열 형태)</span></p><p>// 현재 브라우저의 로케일 가져오기</p><pre class="prettyprint lang-js linenums notranslate pre-word-wrap pretty-total-2">var userLocale = navigator.language || navigator.userLanguage;
console.log(userLocale); // 예: 'ko-KR'</pre><p><br /></p>]]></description>
<dc:creator>최고관리자</dc:creator>
<dc:language>ko</dc:language>
<dc:date>Fri, 30 Jan 2026 12:36:20 +0900</dc:date>
</item>
<item>
<author>최고관리자</author>
<category><![CDATA[WYSIWYG Editors]]></category>
<title>summernote 에디터에서 CodeMirror 사용 및 CodeMirror  사용시 전체선텍, 초기화, 데이타삽입, 복사</title>
<link>http://cginjs.com/datatip/120</link>
<description><![CDATA[<p>summernote 에디터에서 CodeMirror 사용</p><pre class="prettyprint lang-html linenums notranslate pre-word-wrap">&lt;link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.29.0/theme/monokai.min.css"&gt;
&lt;link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.29.0/codemirror.min.css"&gt;
&lt;script src="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.29.0/codemirror.min.js"&gt;&lt;/script&gt;
&lt;script src="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.29.0/mode/xml/xml.min.js"&gt;&lt;/script&gt;
&lt;script src="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.29.0/mode/htmlmixed/htmlmixed.min.js"&gt;&lt;/script&gt;</pre><pre class="prettyprint lang-js linenums notranslate pre-word-wrap">$('#summernote').summernote({
	codemirror: {
		mode: 'text/html',
		htmlMode: true,
		lineNumbers: true,
		heme: 'monokai'
	}
});</pre><p><br /></p><p>summernote 에디터에서 CodeMirror 사용시 전체선텍, 초기화, , 데이타삽입, 복사</p><pre class="prettyprint lang-js linenums notranslate pre-word-wrap">// CodeMirror 인스턴스 가져오기
var cm = $note_editor.find('.note-codable').data('cmEditor');
if (cm) {
	cm.focus();
	cm.execCommand('selectAll'); // CodeMirror 전체 콘텐츠를 선택
}

// CodeMirror 인스턴스 가져오기
var cm = $note_editor.find('.note-codable').data('cmEditor');
if (cm) {
	cm.setValue('');// CodeMirror 데이터 초기화
}

// CodeMirror 인스턴스 가져오기
var cm = $note_editor.find('.note-codable').data('cmEditor');
if (cm) {
	cm.setValue('CodeMirror에 데이터 삽입');// CodeMirror에 데이터 삽입
}

// CodeMirror 인스턴스 가져오기
var cm = $note_editor.find('.note-codable').data('cmEditor');
if (cm) {
	var copyArea = $.trim( cm.getValue() ); // CodeMirror에 데이터확인
	navigator.clipboard.writeText(copyArea)
		.then(resultText =&gt; { 
			alert('데이터가 복사되었습니다.'); // Clipboard
			console.log('I copied the CodeMirror editor value tag. [Clipboard API] ');
		})
		.catch(err =&gt; { 
			console.log('Something went wrong', err); 
	}); 
}
</pre>
<p><br /></p>]]></description>
<dc:creator>최고관리자</dc:creator>
<dc:language>ko</dc:language>
<dc:date>Thu, 29 Jan 2026 14:33:25 +0900</dc:date>
</item>
<item>
<author>최고관리자</author>
<category><![CDATA[Javascript]]></category>
<title>querySelector 문법 (CSS 선택자)</title>
<link>http://cginjs.com/datatip/119</link>
<description><![CDATA[<p><span style="font-size:1em;">querySelector 문법 (CSS 선택자)</span></p><p><span style="font-size:1em;">querySelector() 함수는 지정한 CSS 선택자와 일치하는 첫 번째 요소 객체를 반환한다.</span></p><p>일치하는 요소가 없으면 null을 반환한다.</p><p><span style="font-size:1em;">지정한 선택자와 일치하는 모든 요소의 목록이 필요한 경우 querySelectorAll() 함수를 사용해야 한다.</span></p><p><span style="font-size:1em;"><br /></span></p><p>기본적인 선택자</p><pre class="prettyprint lang-js linenums notranslate pre-word-wrap">document.querySelector("#btn_prev"); 기본적인 선택자
document.querySelector(".btn_prev"); // class
document.querySelectorAll("button"); // 태그
document.querySelectorAll("[name]"); // name 속성이 있는 요소 모두
document.querySelectorAll("[value='1']") // value 속성이 1 인 요소 모두
document.querySelectorAll("#btn_prev, button")// ID가 'btn_prev' 인 요소와 Button 태그들을 선택
document.querySelectorAll("button#btn_prev");// button 태그이면서 아이디가 'btnPrev' 인 요소를 선택
document.querySelectorAll('input[type="checkbox"]');
document.querySelector("input[name=subject]")
document.querySelector("[name=stx]");
document.querySelector("meta[name='token']");</pre><p>계층 선택자<span style="font-size:1em;"></span></p><pre class="prettyprint lang-js linenums notranslate pre-word-wrap">document.querySelectorAll("div &gt; input");// div 바로 밑에 있는 input 태그를 선택(바로 밑에 있는 자식들만)
document.querySelectorAll("div input");// div 태그 밑에 있는 input 태그를 선택</pre><p>^ , $, *, ! 선택자</p><pre class="prettyprint lang-js linenums notranslate pre-word-wrap">document.querySelectorAll("[value*='a']"); // * 어느곳에라도 있는지 : 'value'라는 속성의 값에 'a'라는 문자가 포함된 요소 선택
document.querySelector("[value^='a']");// ^ 시작 : 'value'라는 속성의 값이 'a'로 시작하는 요소 선택
document.querySelectorAll("[value$='e']"); // $ 끝 : 'value'라는 속성의 값이 'e'으로 끝나는 요소 선택
document.querySelectorAll("[value!='1']"); // ! 아닌 것 : 'value'라는 속성의 값이 '1'이 아닌 요소 선택</pre><p>필터 선택자</p><pre class="prettyprint lang-js linenums notranslate pre-word-wrap">document.querySelectorAll("div:even"); // 짝수번째 div태그만 선택
document.querySelectorAll("div:odd"); // 홀수번째 div태그만 선택
document.querySelectorAll("li:nth-child(2)"); // li 태그의 형제들중 2번째 요소만 요소만 선택
document.querySelectorAll("li:first");// 첫번째 li태그 요소만 선택
document.querySelectorAll("li:last");// 마지막 li태그 요소만 선택
document.querySelector("li:eq(2)"); // 3번째 li태그 선택
document.querySelectorAll("li:gt(2)"); // 3번째이후 li태그 선택
document.querySelectorAll("li:lt(2)"); // 3번째이전 li태그 선택</pre><p>- selected, checked, disabled, enabled, focus : 요소 상태에 따른 필터</p><pre class="prettyprint lang-js linenums notranslate pre-word-wrap">document.querySelectorAll("option:selected");// selected된 option만 선택
document.querySelectorAll("input[type='checkbox']:checked"); // checked된 checkbox만 선택
document.querySelectorAll("input:disabled"); // disabled된 input태그만 선택
document.querySelectorAll("input:enabled"); // enabled된 input태그만 선택
document.querySelectorAll("input:focus"); // focus된 input태그만 선택</pre><p>- not(원치 않는 선택자) : 원치않는 선택자를 필터</p><pre class="prettyprint lang-js linenums notranslate pre-word-wrap">document.querySelectorAll("input:not(:disabled)"); // input태그중 disabled되지 않은 요소만 선택
document.querySelectorAll("input:not(.frm_disabled)"); // input태그중 class .frm_disabled 되지 않은 요소만 선택</pre><p>- has(포함된 선택자) : 포함된 선택자를 포함하고 있는 선택자를 필터</p><pre class="prettyprint lang-js linenums notranslate pre-word-wrap">document.querySelectorAll("div:has(h1)"); // h1태그를 포함한 div태그만 선택</pre><p>- contains(문자열) : 문자열을 포함한 선택자를 필터</p><pre class="prettyprint lang-js linenums notranslate pre-word-wrap">document.querySelectorAll("p:contains('test')"); // 'test' 라는 텍스트를 포함한 p 태그를 선택</pre><p>- hidden, visible : 숨겨진, 보이는 요소만 필터</p><pre class="prettyprint lang-js linenums notranslate pre-word-wrap">document.querySelectorAll("div:hidden"); // 숨겨진 div태그를 선택
document.querySelectorAll("div:visible"); // 보이는 div태그를 선택</pre><p><br /></p>]]></description>
<dc:creator>최고관리자</dc:creator>
<dc:language>ko</dc:language>
<dc:date>Thu, 29 Jan 2026 11:07:05 +0900</dc:date>
</item>
<item>
<author>최고관리자</author>
<category><![CDATA[Javascript]]></category>
<title>div  수평 스크롤 제어 scrollLeft</title>
<link>http://cginjs.com/datatip/118</link>
<description><![CDATA[<pre class="prettyprint lang-css linenums notranslate pre-word-wrap pretty-total-9">&lt;style&gt;
.content-wrapper{width:900px; margin:3px auto; padding:5px; border: 1px solid #ccc; overflow-x:auto; white-space:nowrap;}
.content-wrapper::-webkit-scrollbar { width: 20px; }
.content-wrapper::-webkit-scrollbar-track { background-color: gray; }
.content-wrapper::-webkit-scrollbar-thumb { background-color: skyblue; }
.content-wrapper::-webkit-scrollbar-button { display: none; }
.content-wrapper textarea{ width:1900px;height:300px;}
.btn_scroll_box{width: 300px; margin:3px auto; padding:5px;}
&lt;/style&gt;</pre><pre class="prettyprint lang-html linenums notranslate pre-word-wrap pretty-total-18">&lt;div class="content-wrapper"&gt;
	&lt;textarea class="frm_input frm_textarea"&gt;
.content-wrapper{width:900px; margin:3px auto; padding:5px; border: 1px solid #ccc; overflow-x:auto; white-space:nowrap;}
.content-wrapper::-webkit-scrollbar { width: 20px; }
.content-wrapper::-webkit-scrollbar-track { background-color: gray; }
.content-wrapper::-webkit-scrollbar-thumb { background-color: skyblue; }
.content-wrapper::-webkit-scrollbar-button { display: none; }

.content-wrapper textarea{ width:1900px;height:300px;}
.btn_scroll_box{width: 300px; margin:3px auto; padding:5px;}
	&lt;/textarea&gt;
&lt;/div&gt;
&lt;div class="btn_scroll_box"&gt;
	&lt;button type="button" class="btn btn_scroll_first"&gt;처음&lt;/button&gt;
	&lt;button type="button" class="btn btn_scroll_left"&gt;왼쪽&lt;/button&gt;
	&lt;button type="button" class="btn btn_scroll_right"&gt;오른쪽&lt;/button&gt;
	&lt;button type="button" class="btn btn_scroll_last"&gt;마지막&lt;/button&gt;
&lt;/div&gt;</pre><pre class="prettyprint lang-js linenums notranslate pre-word-wrap pretty-total-24">&lt;script&gt;
$(function(e){
	// 처음 버튼 클릭 시
	$('.btn_scroll_first').click(function() {
		$('.content-wrapper').animate({scrollLeft: 0}, 500);
	});
	 
	// 왼쪽 버튼 클릭 시
	$('.btn_scroll_left').click(function() {
		$('.content-wrapper').animate({scrollLeft: '-=100'}, 500); // 왼쪽으로 500px 이동
	});
	 
	// 오른쪽 버튼 클릭 시
	$('.btn_scroll_right').click(function() {
		$('.content-wrapper').animate({scrollLeft: '+=100'}, 500); // 오른쪽으로 500px 이동
	});
	 
	// 마지막 버튼 클릭 시
	$('.btn_scroll_last').click(function() {
		var scrollLeft_last = $('.content-wrapper textarea').width();
		$('.content-wrapper').animate({scrollLeft: scrollLeft_last}, 500);
	});
});
&lt;/script&gt;</pre><p><br /></p><p><br /></p>]]></description>
<dc:creator>최고관리자</dc:creator>
<dc:language>ko</dc:language>
<dc:date>Wed, 28 Jan 2026 17:08:45 +0900</dc:date>
</item>
<item>
<author>최고관리자</author>
<category><![CDATA[Javascript]]></category>
<title>크롬 브라우저에서 keyup 이벤트가 작동하지 않을때</title>
<link>http://cginjs.com/datatip/117</link>
<description><![CDATA[<p></p><pre class="prettyprint lang-js linenums notranslate pre-word-wrap">
$(document).on('keyup', '#frm_input', function(e) {
	console.log($(this).val());
});
</pre>
<br />크롬 브라우저에서 keyup 이벤트가 작동하지 않을때 <font color="#ff0000">keyup 대신 input </font>이벤트를 사용<br /><br /><p></p>
<pre class="prettyprint lang-js linenums notranslate pre-word-wrap">
document.getElementById('frm_input').addEventListener('input', function(e) {
	console.log(e.target.value);
});
</pre>]]></description>
<dc:creator>최고관리자</dc:creator>
<dc:language>ko</dc:language>
<dc:date>Wed, 28 Jan 2026 16:46:55 +0900</dc:date>
</item>
<item>
<author>최고관리자</author>
<category><![CDATA[Javascript]]></category>
<title>iframe 부모 접근, 자식 접근</title>
<link>http://cginjs.com/datatip/116</link>
<description><![CDATA[<p><b>iframe에서 부모값에 접근</b></p><pre class="prettyprint lang-js linenums notranslate pre-word-wrap">$('#id', parent.document);</pre><p><b>iframe에서 부모창의 다른 frame 접근</b></p><pre class="prettyprint lang-js linenums notranslate pre-word-wrap">$("#id",  parent.frames['frameId'].document);</pre><p><b>자식 함수 호출</b></p><pre class="prettyprint lang-js linenums notranslate pre-word-wrap">document.getElementById('아이프레임아이디').contentWindow.함수명;
$('#아이프레임아이디').contentWindow.함수명;</pre><p><b>자식 요소 접근</b></p><pre class="prettyprint lang-js linenums notranslate pre-word-wrap">$('#아이프레임아이디').contents().find('셀렉터')
window.frames['아이프레임아이디'].document.getElementById('요소아이디');</pre><p><br /></p>]]></description>
<dc:creator>최고관리자</dc:creator>
<dc:language>ko</dc:language>
<dc:date>Thu, 09 Oct 2025 10:48:59 +0900</dc:date>
</item>
<item>
<author>최고관리자</author>
<category><![CDATA[Javascript]]></category>
<title>첫문자를 대문자</title>
<link>http://cginjs.com/datatip/115</link>
<description><![CDATA[<pre class="prettyprint lang-js linenums notranslate pre-word-wrap pretty-total-7">&lt;script&gt;
function jsUcfirst(str) {
	if (!str) return '';
	return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
}
document.write( jsUcfirst('cginjs') );
&lt;/script&gt;</pre>]]></description>
<dc:creator>최고관리자</dc:creator>
<dc:language>ko</dc:language>
<dc:date>Tue, 30 Sep 2025 08:24:54 +0900</dc:date>
</item>
</channel>
</rss>
