728x90
๋ฐ˜์‘ํ˜•

์ „์ฒด ๊ธ€ 1364

[jQuery] .has()

jQuery์˜ .has()๋Š” ์„ ํƒ๋œ ์š”์†Œ ์ง‘ํ•ฉ ์ค‘์—์„œ ํŠน์ • ์ž์‹์„ ํฌํ•จํ•˜๋Š” ์š”์†Œ๋งŒ ํ•„ํ„ฐ๋งํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.๐Ÿ“Œ ๋ฌธ๋ฒ•$(selector).has(selectorOrElement) selectorOrElement: ํŠน์ • ์ž์‹ ์š”์†Œ(selector) ๋˜๋Š” DOM ์š”์†Œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.๋ฐ˜ํ™˜๊ฐ’: ํ•ด๋‹น ์ž์‹ ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์ƒ์œ„ ์š”์†Œ๋งŒ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ƒˆ๋กœ์šด jQuery ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.โœ… ์˜ˆ์ œ 1: ํŠน์ • ์ž์‹ ์š”์†Œ๋ฅผ ๊ฐ€์ง„ ๋ถ€๋ชจ ํ•„ํ„ฐ๋ง Apple Banana Cherry $('li').has('span').css('color', 'red');๐Ÿ“Œ ๊ฒฐ๊ณผ: ์š”์†Œ ์ค‘ ์„ ์ž์‹์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์š”์†Œ๋งŒ ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ๋ฐ”๋€œ์ฆ‰, 2๋ฒˆ์งธ์™€ 3๋ฒˆ์งธ ๋งŒ ์„ ํƒ๋จ โœ… ์˜ˆ์ œ 2: ํŠน์ • DOM ์š”์†Œ๊ฐ€ ์ž์‹์œผ๋กœ ์žˆ๋Š”์ง€ ํ™•์ธ$('#parent1, #p..

Front/JS & jQuery 2025.07.07

[html] href์†์„ฑ # / javascript:void(0) ์ฐจ์ด

ํ•ญ๋ชฉ #javascript:void(0)์˜๋ฏธํ˜„์žฌ ํŽ˜์ด์ง€ ์ตœ์ƒ๋‹จ ์ด๋™JS ์ฝ”๋“œ ์‹คํ–‰ ํ›„ ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š์Œ๊ธฐ๋ณธ ๋™์ž‘ํŽ˜์ด์ง€ ์ตœ์ƒ๋‹จ์œผ๋กœ ์Šคํฌ๋กค ์ด๋™์—†์ŒpreventDefault ํ•„์š” ์—ฌ๋ถ€ํ•„์š” (evt.preventDefault())๋ถˆํ•„์š”SEO ์นœํ™”๋„๋น„๊ต์  ๋‚˜์จ (๋นˆ ๋งํฌ)๋” ๋‚˜์จ (JS ์ง์ ‘ ์‚ฌ์šฉ์€ ๊ถŒ์žฅ ์•ˆ ๋จ)์•ˆ์ •์„ฑ/์ง๊ด€์„ฑ์ค‘๊ฐ„ (์ œ๋Œ€๋กœ ๋ง‰์ง€ ์•Š์œผ๋ฉด ๋ฌธ์ œ)๋” ์•ˆ์ „ํ•˜๊ฒŒ ์ด๋ฒคํŠธ๋งŒ ์‹คํ–‰ ๊ฐ€๋Šฅ โœ… ์™œ href="javascript:void(0)"์€ SEO์— ์•ˆ ์ข‹์„๊นŒ?๋งํฌ๋กœ์จ ์˜๋ฏธ ์žˆ๋Š” ๋ชฉ์ ์ง€๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.๊ฒ€์ƒ‰ ๋กœ๋ด‡์ด "์ด๊ฑด ํด๋ฆญํ•ด๋„ ๊ฐˆ ๊ณณ์ด ์—†๋Š” ๋งํฌ๋„ค"๋ผ๊ณ  ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค.๋‚ด๋ถ€ ๋งํฌ ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ•˜๋ฉด ํŽ˜์ด์ง€ ๋žญํฌ ์ „๋‹ฌ, ์ƒ‰์ธ ๋“ฑ๋ก ๋“ฑ SEO ์ ์ˆ˜๊ฐ€ ๋‚ฎ์•„์ง‘๋‹ˆ๋‹ค.์ฆ‰, a ํƒœ๊ทธ๋Š” ์‹ค์ œ๋กœ ์ด๋™ํ•  ์ฝ˜ํ…์ธ ๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ..

Front/HTML 2025.07.06

[js] hide() / remove()

hide()๋Š” ํ™”๋ฉด์—์„œ๋งŒ ์ˆจ๊ธฐ๊ณ  DOM์—๋Š” ๊ทธ๋Œ€๋กœ ๋‚จ์•„ ์žˆ๋Š” ๋ฐ˜๋ฉด,remove()๋Š” DOM ์ž์ฒด์—์„œ ์š”์†Œ๋ฅผ ์™„์ „ํžˆ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.๋ฉ”์„œ๋“œ ์„ค๋ช…hide()์š”์†Œ๋ฅผ display: none์œผ๋กœ ๋งŒ๋“ค์–ด ํ™”๋ฉด์—์„œ ์ˆจ๊น€. DOM์—๋Š” ์กด์žฌ.remove()์š”์†Œ๋ฅผ DOM ํŠธ๋ฆฌ์—์„œ ์™„์ „ํžˆ ์ œ๊ฑฐ. ์ดํ›„ .find()๋กœ๋„ ๋ชป ์ฐพ์Œ.detach()DOM์—์„œ ์ œ๊ฑฐํ•˜์ง€๋งŒ, ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ/๋ฐ์ดํ„ฐ๋Š” ์œ ์ง€. ๋‚˜์ค‘์— ๋‹ค์‹œ ๋ถ™์ผ ์ˆ˜ ์žˆ์Œ. โœ… ์–ธ์ œ remove๋ฅผ ์“ธ๊นŒ?ํผ์—์„œ ์•„์˜ˆ ํ•ด๋‹น ํ•ญ๋ชฉ์ด ํ•„์š” ์—†์„ ๋•Œ์„ฑ๋Šฅ์ƒ ํ•„์š” ์—†๋Š” ๋…ธ๋“œ๋ฅผ ์ค„์ด๊ณ  ์‹ถ์„ ๋•Œ์‚ฌ์šฉ์ž์—๊ฒŒ ํ˜ผ๋ž€์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ๋น„ํ™œ์„ฑํ™” ํ•„๋“œ ์ž์ฒด๋ฅผ ์•ˆ ๋ณด์—ฌ์ค„ ๋•Œํ•„์š”์— ๋”ฐ๋ผ hide() vs remove() ์„ ํƒํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.remove()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ดํ›„ ํ•ด๋‹น ์š”์†Œ๋Š” ๋‹ค์‹œ show()๋กœ ๋ณต๊ตฌํ•  ์ˆ˜..

Front/JS & jQuery 2025.07.05

[DB][Oracle] LISTAGG(DISTINCT ...)

https://imswengineer.tistory.com/1301 [DB][Oracle] LISTAGGLISTAGG๋Š” Oracle DB๋ฅผ ํฌํ•จํ•œ SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์—ฌ๋Ÿฌ ํ–‰์˜ ๊ฐ’์„ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ์ง‘๊ณ„(Aggregation) ํ•  ๋•Œ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.์ฃผ๋กœ ๊ทธ๋ฃนํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์ž์—ด๋กœ ์—ฐ๊ฒฐํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.๐Ÿ“Œ ๊ธฐ๋ณธ ๋ฌธimswengineer.tistory.com ์ค‘๋ณต ์ œ๊ฑฐ: ๊ธฐ๋ณธ์ ์œผ๋กœ ์ค‘๋ณต ์ œ๊ฑฐ๋Š” ์•ˆ ๋จ → DISTINCT ์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ์œผ๋กœ ์ž‘์„ฑํ•˜์˜€๋Š”๋ฐ โœ… ์˜ค๋ผํด 21c ์ด์ƒ์ผ ๊ฒฝ์šฐ LISTAGG(DISTINCT ...)๋„ ๊ฐ€๋Šฅ์˜ค๋ผํด 21c ์ด์ƒ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ๋ฒ•์ด ๊ณต์‹ ์ง€์›๋ฉ๋‹ˆ๋‹ค:LISTAGG(DISTINCT CI.EXHL_CD, ', ') WITHIN GROUP (ORDER BY ..

DB 2025.07.04

[CSS] pointer-events

pointer-events๋Š” CSS ์†์„ฑ ์ค‘ ํ•˜๋‚˜๋กœ, ๋งˆ์šฐ์Šค ํด๋ฆญ์ด๋‚˜ ํ„ฐ์น˜ ๊ฐ™์€ "ํฌ์ธํ„ฐ ์ด๋ฒคํŠธ"๋ฅผ ํ•ด๋‹น ์š”์†Œ์— ์ „๋‹ฌํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.๐Ÿ” ์‰ฝ๊ฒŒ ๋งํ•ด:pointer-events: none;์„ ์ฃผ๋ฉด,ํ•ด๋‹น ์š”์†Œ๋Š” ํด๋ฆญ๋˜์ง€ ์•Š์œผ๋ฉฐ, hover, active ๋“ฑ๋„ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.๐Ÿงช ์˜ˆ์‹œํด๋ฆญ ์•ˆ ๋จํด๋ฆญ ๋จ none → ํด๋ฆญํ•ด๋„ ์•„๋ฌด ์ผ๋„ ์•ˆ ์ƒ๊น€auto → ๊ธฐ๋ณธ ๋™์ž‘ (ํด๋ฆญ ๊ฐ€๋Šฅ) ์ด ๋ฒ„ํŠผ๋„ ํด๋ฆญ ์•ˆ๋จ ๋ถ€๋ชจ์ธ ์— pointer-events: none์„ ์ค˜๋„, ์ž์‹์ธ ๋ฒ„ํŠผ๋„ ํด๋ฆญ ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๊ฐ’์„ค๋ช…auto๊ธฐ๋ณธ๊ฐ’, ํฌ์ธํ„ฐ ์ด๋ฒคํŠธ ์ •์ƒ ์ฒ˜๋ฆฌnoneํฌ์ธํ„ฐ ์ด๋ฒคํŠธ ๋ฌด์‹œ (ํด๋ฆญ, hover ๋ชจ๋‘ ๋ฌด์‹œ)inherit๋ถ€๋ชจ ์š”์†Œ์˜ ๊ฐ’์„ ์ƒ์†

Front/CSS 2025.07.03

[js] ์ค‘๋ณต ํด๋ฆญ ๋ฐฉ์ง€ ์ฒ˜๋ฆฌ - ํ”Œ๋ž˜๊ทธ ๋ณ€์ˆ˜ ์‚ฌ์šฉ

let isSubmitting = false;$('#submitBtn').on('click', async function() { if (isSubmitting) return; isSubmitting = true; try { await submitOpinion(); // ์˜ˆ: ์˜๊ฒฌ ๋“ฑ๋ก API ํ˜ธ์ถœ alert('์˜๊ฒฌ์ด ๋“ฑ๋ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค.'); } catch (e) { alert('์˜ค๋ฅ˜ ๋ฐœ์ƒ'); } finally { isSubmitting = false; }});

Front/JS & jQuery 2025.07.02

[js] ์ค‘๋ณต ํด๋ฆญ ๋ฐฉ์ง€ ์ฒ˜๋ฆฌ - ๋ฒ„ํŠผ๋น„ํ™œ์„ฑํ™” ๋ฐฉ๋ฒ•

$('#submitBtn').on('click', async function() { const $btn = $(this); if ($btn.prop('disabled')) return; // ์ด๋ฏธ ๋ˆŒ๋ ธ๋‹ค๋ฉด ๋ฌด์‹œ $btn.prop('disabled', true); // ๋ฒ„ํŠผ ๋น„ํ™œ์„ฑํ™” try { // ๋“ฑ๋ก ๋กœ์ง await submitOpinion(); // ์˜ˆ: ์˜๊ฒฌ ๋“ฑ๋ก API ํ˜ธ์ถœ alert('์˜๊ฒฌ์ด ๋“ฑ๋ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค.'); } catch (e) { console.error(e); alert('๋“ฑ๋ก ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.'); } finally { $btn.prop('disabled', fal..

Front/JS & jQuery 2025.07.01

[IntelliJ] gitIgnore ์„ค์ •

IntelliJ์—์„œ GUI๋กœ .gitignore ์„ค์ •์„ ํŽธํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด,๐Ÿ‘‰ .ignore ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.โœ… .ignore ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜ ๋ฐฉ๋ฒ•IntelliJ ๋ฉ”๋‰ด์—์„œ File → Settings (Ctrl + Alt + S)์™ผ์ชฝ์—์„œ Plugins ํด๋ฆญ์ƒ๋‹จ Marketplace ํƒญ์—์„œ .ignore ๊ฒ€์ƒ‰์•„๋ž˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜:.ignore by hsz์„ค์น˜ ํ›„ IntelliJ ์žฌ์‹œ์ž‘โœ… ์„ค์น˜ ํ›„ ์‚ฌ์šฉ๋ฒ•๋ฐฉ๋ฒ• 1: ํŒŒ์ผ ์šฐํด๋ฆญ → IgnoreProject ์ฐฝ์—์„œ ํŒŒ์ผ/ํด๋” ์šฐํด๋ฆญAdd to .gitignore ๋ฉ”๋‰ด ํด๋ฆญ๐Ÿ‘‰ ์ž๋™์œผ๋กœ .gitignore ํŒŒ์ผ์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.๋ฐฉ๋ฒ• 2: .gitignore ํŒŒ์ผ ๋ฌธ๋ฒ• ์ž๋™ ์™„์„ฑ.gitignore ํŒŒ์ผ์„ ์—ด๋ฉด ์ฝ”๋“œ ์ž๋™์™„์„ฑ, ๊ฒฝ๋กœ ์ถ”์ฒœ, ํ•˜์ด๋ผ์ดํŒ… ๊ฐ€๋Šฅ

IT์ง€์‹ 2025.06.30

[js] $.extend(a, b)์™€ $.extend({}, a, b)์˜ ์ฐจ์ด

โœ… ๊ธฐ๋ณธ์ ์ธ ์ฐจ์ด$.extend(a, b):์ฒซ ๋ฒˆ์งธ ์ธ์ž(a)์— ๋‘ ๋ฒˆ์งธ ์ธ์ž(b)์˜ ๋‚ด์šฉ์„ ๋ฎ์–ด์”๋‹ˆ๋‹ค.์ฒซ ๋ฒˆ์งธ ์ธ์ž๊ฐ€ ์›๋ณธ ๊ฐ์ฒด์ด๋ฏ€๋กœ, ์›๋ณธ ๊ฐ์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.$.extend({}, a, b):์ฒซ ๋ฒˆ์งธ ์ธ์ž์— ๋นˆ ๊ฐ์ฒด {}๋ฅผ ์ „๋‹ฌํ•˜๊ณ , **a์™€ b**๋ฅผ ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค.์›๋ณธ ๊ฐ์ฒด(a)๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ณ , ์ƒˆ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์–ด ๋ณ‘ํ•ฉ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.โœ… ์ƒ์„ธ ๋น„๊ต1. $.extend(a, b)๋™์ž‘: ์ฒซ ๋ฒˆ์งธ ์ธ์ž์— ๋‘ ๋ฒˆ์งธ ์ธ์ž์˜ ์†์„ฑ์„ ๋ฎ์–ด์”๋‹ˆ๋‹ค.๊ฒฐ๊ณผ: ์›๋ณธ ๊ฐ์ฒด(a)๊ฐ€ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.jslet a = { others: "๊ธฐํƒ€์‚ฌํ•ญ" };let b = { others: null, memo: "๋ฉ”๋ชจ" };$.extend(a, b); // a์— b์˜ ๊ฐ’์„ ๋ฎ์–ด์”€console.log(a.others); // null (..

Front/JS & jQuery 2025.06.26

[js] $.extend() null์ผ ๊ฒฝ์šฐ ๋ฎ์–ด์“ฐ์ง€ ์•Š๊ฒŒ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•

$.extend({ deepMerge: function(target, source) { for (let key in source) { if (source[key] !== null) { // null์ผ ๊ฒฝ์šฐ ๋ฎ์–ด์“ฐ์ง€ ์•Š์Œ target[key] = source[key]; } } return target; }}); let a = { others: "๊ธฐํƒ€์‚ฌํ•ญ" };let b = { others: null };let result = $.extend.deepMerge({}, a, b);console.log(result.others); // "๊ธฐํƒ€์‚ฌํ•ญ" (b.others๊ฐ€ null์ด๋ฏ€๋กœ ๋ฎ์–ด์“ฐ์ง€ ์•Š์Œ)

Front/JS & jQuery 2025.06.25
728x90
๋ฐ˜์‘ํ˜•