레이블이 jquery인 게시물을 표시합니다. 모든 게시물 표시
레이블이 jquery인 게시물을 표시합니다. 모든 게시물 표시

2024년 1월 3일 수요일

jQuery - Datepicker

 
<script>
   $(function() {
       //input을 datepicker로 선언
       $("#datepicker").datepicker({
           dateFormat: 'yy-mm-dd' //달력 날짜 형태
           ,showOtherMonths: true //빈 공간에 현재월의 앞뒤월의 날짜를 표시
           ,showMonthAfterYear:true // 월- 년 순서가아닌 년도 - 월 순서
           ,changeYear: true //option값 년 선택 가능
           ,changeMonth: true //option값  월 선택 가능                
           ,showOn: "both" //button:버튼을 표시하고,버튼을 눌러야만 달력 표시 ^ both:버튼을 표시하고,버튼을 누르거나 input을 클릭하면 달력 표시  
           ,buttonImage: "http://jqueryui.com/resources/demos/datepicker/images/calendar.gif" //버튼 이미지 경로
           ,buttonImageOnly: true //버튼 이미지만 깔끔하게 보이게함
           ,buttonText: "선택" //버튼 호버 텍스트              
           ,yearSuffix: "년" //달력의 년도 부분 뒤 텍스트
           ,monthNamesShort: ['1월','2월','3월','4월','5월','6월','7월','8월','9월','10월','11월','12월'] //달력의 월 부분 텍스트
           ,monthNames: ['1월','2월','3월','4월','5월','6월','7월','8월','9월','10월','11월','12월'] //달력의 월 부분 Tooltip
           ,dayNamesMin: ['일','월','화','수','목','금','토'] //달력의 요일 텍스트
           ,dayNames: ['일요일','월요일','화요일','수요일','목요일','금요일','토요일'] //달력의 요일 Tooltip
           ,minDate: "-5Y" //최소 선택일자(-1D:하루전, -1M:한달전, -1Y:일년전)
           ,maxDate: "+5y" //최대 선택일자(+1D:하루후, -1M:한달후, -1Y:일년후)  
       });                    
       
       //초기값을 오늘 날짜로 설정해줘야 합니다.
       $('#datepicker').datepicker('setDate', 'today'); //(-1D:하루전, -1M:한달전, -1Y:일년전), (+1D:하루후, -1M:한달후, -1Y:일년후)            
   });
</script>





function setDatePicker() {
    $.datepicker.regional['ko'] = {
        changeMonth: true,
        changeYear: true,
        closeText: '닫기',
        prevText: '이전달',
        nextText: '다음달',
        currentText: '오늘',
        monthNames: ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'],
        monthNamesShort: ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'],
        dayNames: ['일', '월', '화', '수', '목', '금', '토'],
        dayNamesShort: ['일', '월', '화', '수', '목', '금', '토'],
        dayNamesMin: ['일', '월', '화', '수', '목', '금', '토'],
        weekHeader: 'Wk',
        dateFormat: 'yy-mm-dd',
        firstDay: 0,
        isRTL: false,
        duration: 200,
        showAnim: 'show',
        showMonthAfterYear: true,
        inline: true,
        showOn: 'both',
        buttonImage: "/images/wos/btn_calendar.gif",
        buttonImageOnly: true
    };

    $.datepicker.setDefaults($.datepicker.regional['ko']);
};


    $(document).on("ready", function () {
        setDatePicker();
        $('#txtStartDate, #txtEndDate').datepicker().datepicker('setDate', new Date());
    });





2022년 11월 30일 수요일

jQuery - 다양한 사용 예문



// ready
$(document).ready(function () {
// 버튼 클릭 이벤트
$("#btnID").click(function () {
});
// layer 클릭 이벤트
$(".layer").find("a[class='close_layer_popup']").click(함수호출);

// keypress 이벤트
$("#textID").keypress(inputOnlyNumber);
$("input[id^=txtPhoneNum]:text, input[id^=txtCellNum]:text").keypress(inputOnlyNumber);

// focusout 이벤트
$("#textID").focusout(function(e) {
});

// attr 속성 값 가지고 오기
var data_abc = parseInt($("#textID").attr("data-abc"));
});

// load
$(window).load(function () {
});

// 숫자키만 입력 + 특수문자 일부 허용
function inputOnlyNumber() {
    if (event.keyCode >= 44 && event.keyCode <= 57) {
        return true;
    } else {
        return false;
    }
}

// 간단한 ajax 사용 예문
$.ajax({
url: "url.asp",
type: "POST",
data: "IDX=" + idx + "&GUBUN=" + gubun,
contentType: "application/x-www-form-urlencoded; charset=euc-kr", // 한글 문제인 경우
async: false, // 동기화 처리
success: function (data) {
//alert(data == "SUCCESS" ? "성공" : "실패");
},
error: function (request, status, error) {
//alert("code:" + request.status + "\n" + "message:" + request.responseText + "\n" + "error:" + error);
}
});

// ajax (json)
$.ajax({
url: "/aaa/bbb.asp",
async: false,
type: "POST",
contentType: "application/json",
data: "{Num:'" + Num + "', vId:'" + vId + "', zipCode:'" + zipCode + "' , isfree:'" + 1 + "'}",
success: function (result) {
var aaa = result[0].AAA;
},
error: function() {
alert("장바구니 정보 수정에 실패하였습니다.");
}
});


// 체크박스 전체 선택 및 미선택
function CheckBox_All(obj, cbName) {
$("input:checkbox[name=" + cbName + "]").each(function () {
$(this).prop("checked", $(obj).is(":checked"));
});
}
 
// 체크되어 있는 체크박스 개수 확인
var checkLength = $("input:checkbox[name=" + cbName + "]:checked").length;
if (checkLength == 0) {
alert("일괄 수정할 선택한 상품이 없습니다.");
return false;
}

// 체크되어 있는 체크박스 찾아서 박복 처리
var checkRequestPrice = true;
var checkPrePrice = true;
$("input:checkbox[name=" + cbName + "]:checked").each(function () {
// table의 tr 중에 체크박스와 같은 tr을 찾아 tr 안에 있는 hidden 또는 text 값 구하기
var prePrice = $(this).closest('tr').find("input:hidden[name=prePrice]").val();
var requestPrice = ($(this).closest('tr').find("input:text[name=requestPrice]").val()).replace(",", "");
// 숫자 체크
if ($.isNumeric(requestPrice) == false || requestPrice == "0") {
checkRequestPrice = false;
}
// 문자를 숫자로 비교
if (parseInt(prePrice) == parseInt(requestPrice)) {
checkPrePrice = false;
}

// 해당 tr 삭제
$(this).closest("tr").remove();
});

// 부모창 > 부모창 > 자식창에서 부모창 호출 방법

// 자식창
parent.WindowCloseAndRefresh();

// 부모창
function WindowCloseAndRefresh() {
parent.opener.location.reload();
window.close();
}

// iframe으로 데이터 submit하여 처리하는 방법 (formAction form에 있는 객체 데이터)
<div style="display: none;">
    <iframe name="ifrmAction" id="ifrmAction" height="0" width="0"></iframe>
</div>
formAction.action = "Exec.asp";
formAction.target = "ifrmAction";
formAction.submit();

// 객체 활성화 및 비활설화
$("#COUNT_EVERY").prop('disabled', true);
$("input").prop('disabled', false);

// table > tr > td 에 있는 html 값 가지고 오기
function ProdAdd() {
var items = $("input:checkbox[name=chkBoxName]:checked");
if (items.length == 0) {
alert("선택해 주세요.");
return false;
}
var a = "";
var b = "";
var c = "";
$(items).each(function () {
var tdObj = $(this).closest("tr").find('td');
a = $(this).val();
b = $(tdObj).eq(2).html();
c = $(tdObj).eq(3).html();
if (parent.IsFindProd(ProdNum) == false) {
parent.SeachProdSelectAdd(a, b, c);
}
});
}

// 반복 값 join 만들기
var arrays = $("input[name=chkboxName]:checkbox:checked").map(function () {
return "'" + $(this).attr("data-abc") + "'";
}).get();
var arrayJoin = "[" + arrays.join(",") + "]";

// 요소 추가
function SeachProdSelectAdd(a, b, c) {
var appendHtml = "<tr style='height: 22px;' onmouseover='this.style.backgroundColor=\"#E3FEEB\"' onmouseout='this.style.backgroundColor=\"#FFFFFF\"'><td style='text-align: center;'><input type='checkbox' name='chkBoxPRODADD' value='" + a + "' style='cursor: pointer;' /><input type='hidden' name='PROD_ADD' value='" + a + "'></td><td style='text-align: center;'>" + a + "</td><td>" + b + "</td><td>" + c + "</td></tr>"
//$("#tablePRODADD").append(appendHtml);  // 자식(children) 뒤 요소에 추가
$("#tablePRODADD").prepend(appendHtml);   // 자식(children) 앞 요소에 추가
}

// 텍스트 박스 엔터키 클리 시 submit 처리
<input type="text" name="s_word1" size="25" value="<%=strSWord1%>" onkeypress="FN_FormSubmit()">
function FN_FormSubmit() {
if (event.keyCode == 13) {
document.ListForm.submit();
}
}

// for 문
for (var i = 0; i < list.length; i++) {
}

// 공백제거
$.trim("문자")



2022년 6월 15일 수요일

jQuery - Selector (예문)


--------------------------------------------------------


    function ProdRemove() {
        var items = $("input:checkbox[name=chkBoxPRODADD]:checked");

        if (items.length == 0) {
            alert("선택한 상품이 없습니다.");
            return false;
        }

        if (confirm("선택한 상품을 삭제하시겠습니까?") == false) {
            return false;
        }

        $(items).each(function () {
            $(this).closest("tr").remove();
        });

        ProdAddCount();
    }


    function ProdAddCount() {
        var trCount = $("table#tablePRODADD tbody tr").length;
        $("#labProdCount").html(trCount);

        if (trCount == 0) {
            $("input:checkbox[name=all_chk]").prop("checked", false);
        }
    }


    function CheckBox_All(obj, cbName) {
        $("input:checkbox[name=" + cbName + "]").each(function () {
            $(this).prop("checked", $(obj).is(":checked"));
        });
    }

    function SeachProdSelectAdd(prodNum, prodName, prodStds, prodUnit, prodMaker) {
        var appendHtml = "<tr> ~~ </tr>"
        //$("#tablePRODADD").append(appendHtml);  // 자식(children) 뒤 요소에 추가
        $("#tablePRODADD").prepend(appendHtml);   // 자식(children) 앞 요소에 추가
    }


    function IsFindProd(prodNum) {
        var reValue = false;

        $("input:checkbox[name=chkBoxPRODADD]").each(function () {
            if ($(this).val() == prodNum) {
                reValue = true;
                return false;
            }
        });

        return reValue;
    }


    function ProdAdd() {
        var items = $("input:checkbox[name=chkBoxPROD]:checked");

        if (items.length == 0) {
            alert("상품을 선택해 주세요.");
            return false;
        }

        var ProdNum = "";
        var ProdName = "";
        var ProdStds = "";
        var ProdUnit = "";
        var ProdMaker = "";

        $(items).each(function () {
            var tdObj = $(this).closest("tr").find('td');

            ProdNum = $(this).val();
            ProdName = $(tdObj).eq(2).html();
            ProdStds = $(tdObj).eq(3).html();
            ProdUnit = $(tdObj).eq(4).html();
            ProdMaker = $(tdObj).eq(5).html();

            if (parent.IsFindProd(ProdNum) == false) {
                parent.SeachProdSelectAdd(ProdNum, ProdName, ProdStds, ProdUnit, ProdMaker);
            }
        });

        parent.ProdAddCount();
    }

    function AreaAddListOrderby() {
        var sortdir = 1;    // asc
        //var sortdir = -1;   // desc
        var rec = $("table#tableList1 tbody tr");

        rec.sort(function (a, b) {
            //var val1 = $(a).children('td').eq(column).text().toUpperCase();
            //var val2 = $(b).children('td').eq(column).text().toUpperCase();
            var val1 = a.getAttribute("data-Orderby").toUpperCase();
            var val2 = b.getAttribute("data-Orderby").toUpperCase();
            return (val1 < val2) ? -sortdir : (val1 > val2) ? sortdir : 0;
        });

        $.each(rec, function (index, row) {
            $('table#tableList1 tbody').append(row);
        });
    }

    function WindowCloseAndRefresh() {
        parent.opener.location.reload();
        window.close();
    }


--------------------------------------------------------


[예제] $(this)는 $(".me") 가정



<div class="grandmom">
        <div class="mom">
                <div class="me">
                        <div class="son">
                                <div class="grandson">
                                </div> //end grandson
                        </div> //end son
                <div> // end me 
                <div class="brother">
                </div> //end brother
                <div class="sister">
                </div> //end brother
        </div> //end mom
</div> //ent grandmom


1. parent()    
- 결과 : mom, grandmom

parent() 함수는 부모'들'을 호출한다. 위 상황에서 $(this).parent() 로 호출하면 mom, grandmom 이 모두 호출된다. grandmom만 선택하고 싶다면 $(this).parent().parent() 로 호출하는 법도 있지만, 보다 세련되게 하려면 index로 호출하는 eq() 함수를 쓰자. $(this).parent().eq(2); 이렇게 하면 2번째 상위의 parent 요소가 선택된다.


2. closest()
- 결과 : mom

closest() 함수는 함수 명처럼 가장 가까운 부모를 선택한다. 


3. siglings() 
- 결과 : brother, sister

형제 요소들'을' 호출한다. 만약 바로 옆에 있는 형제만 선택하고 싶다면 next() 함수를 쓰면 된다. $(this).next("div") 이렇게 선택하면 .brother 가 선택된다.


4. children()
- 결과 : son

직계 자식을 선택한다. son 밑에 grandson이 있지만 grandson 은 선택되지 않는다. grandson까지 선택하고 싶으면 find() 를 사용하자. find는 depth에 상관없이 자손들을 모두 선택한다. (jQuery 선택자에서 자손과 자식은 다른 의미로 사용된다. 자손은 depth 하위의 자식들도 포괄하고, 자식은 직계자식만을 의미한다.)


--------------------------------------------------------


.parent()
 선택한 요소의 부모(parent) 요소를 선택


.parents()
 선택한 요소의 부모(parent) 요소를 모두 선택


.parentsUntil()
 선택한 요소의 조상 요소 중에서 지정한 선택자에 해당하는 요소 바로 이전까지의 요소를 모두 선택


.closest()
 선택한 요소를 포함한 조상 요소 중에서 지정한 선택자에 해당하는 요소 중 가장 첫 번째 요소를 선택


--------------------------------------------------------



2022년 1월 11일 화요일

jQuery - opener, parent


jQuery 자식 팝업 창에서 부모창 컨트롤


$(opener.document).find("#Form").attr("action","index.do").submit();



자식창 -> 부모창으로 값 전달하기


- opener.document.getElementById("id").value="value"; //dom 객체로 제어

$("#id",opener.document).val("value"); // jQuery 방식 1

$("input[name=imgFile]", parent.document.body).val() // 방식 2

$(opener.document).find("#id").val("value"); //방식 3


- opener.location.href="javascript:fun();"; //일반적인 방법

$(opener.location).attr("href","javascript:fun();"); //jQuery 이용


출처 : https://jp1020.tistory.com/entry/jQuery%EC%97%90%EC%84%9C-%ED%8C%9D%EC%97%85-%EB%B6%80%EB%AA%A8opener-%EA%B0%9D%EC%B2%B4-%EC%BB%A8%ED%8A%B8%EB%A1%A4



2022년 1월 5일 수요일

jQuery - 셀렉터(선택자)

 

$(document).ready(function(){

$('a[href^="mailto:"]').addClass('linkA');
  // html속성값이 "mailto:"로 시작하는 링크요소
$('a[href$=".html"]').addClass('linkB');
  // html속성값이 ".html"로 끝나는 문자열을 갖는 링크
$('a[href*="mysite.com"]').addClass('linkC');
  // "mysite.com"이 URL의 일부로 사용되는 링크
$('tr:odd').addClass('odd')// 홀수번째 줄
$('tr:even').addClass('even')// 짝수번째 줄
$('td:contains("퍼티6")').addClass('bold')// "퍼티6"이라는 텍스트
$('div.box:eq(1)').addClass('Doc')// "box"클래스를 가지는 div 집합 중에서 두 번째 항목
$('div:nth-child(1)').addClass('Doc');
  // 부모 div의 첫 번째 자식에 해당하는 요소
$("div").not(".comm").addClass('Doc');
$("div").find("li").css(어트리뷰트속성);
$(this).parent(); //부모
$(this).children(); //자식
$("li:nth-child(8n+1)").css("page-break-before""always");
  //8의 배수 + 1 번째 아이템을 반환, 다음페이지에 인쇄

DOM 객체 $('.open', $('div#footer')) //div#footer가 소유하고 있는 '.open'만 찾는다

});



위치 셀렉터

a:first페이지에서 첫 번째 <a> 엘리먼트
p:odd모든 홀수 번째 문단 <p> 엘리먼트
p:even모든 짝수 번째 문단 <p> 엘리먼트
li:last-child부모 엘리먼트의 마지막 자식 엘리먼트
:first페이지에서 처음으로 일치하는 엘리먼트
:last페이지에서 마지막으로 일치하는 엘리먼트
:first-child첫 번째 자식 엘리먼트
:last-child마지막 자식 엘리먼트
:only-child형제가 없는 모든 엘리먼트를 반환한다
:nth-child(n)n번째 자식 엘리먼트
:nth-child(even:odd)짝수 또는 홀수 자식 엘리먼트
:nth-child(Xn+Y)전달된 공식에 따른 n번째 자식 엘리먼트. Y는 0인 경우 생략 가능.
:nth-last-child(2)마지막에서 두번째 자식 엘리먼트
:nth-child(3n)3의 배수 번째 아이템을 반환
:nth-child(5n+1)5의 배수 + 1 번째 아이템을 반환
:even페이지 전체의 짝수 번째 엘리먼트
:odd페이지 전체의 홀수 번째 엘리먼트
:eq(n)n번째로 일치하는 엘리먼트
:gt(n)n번째 엘리먼트(포함되지 않음) 이후의 엘리먼트와 일치.
:lt(n)n번째 엘리먼트(포함되지 않음) 이전의 엘리먼트와 일치.


n번째 자식 셀렉터는 CSS와 호환성을 유지하려고 인덱스를 1부터 시작.
jQuery 정의 셀렉터는 범용 프로그래밍 규약에 따라 인덱스를 0부터 시작.

정의 셀렉터

:button모든 버튼을 선택 ( input[type=submit], input[type=reset], input[type=button], button )
:checkbox체크박스 엘리먼트만 선택
:checked선택된 체크박스나 라디오 버튼만 선택 (CSS에서 지원)
:contains(foo)텍스트 foo를 포함하는 엘리먼트만 선택
:disabled인터페이스에서 비활성화 상태인 모든 폼 엘리먼트를 선택 (CSS에서 지원)
:enabled인터페이스에서 활성화 상태인 모든 엘리먼트를 선택 (CSS에서 지원)
:file모든 파일 엘리먼트를 선택 ( input[type=file] )
:header헤더 엘리먼트만 선택 <h1>부터 <h6>까지 선택
:hidden감춰진 엘리먼트만 선택
:image폼 이미지를 선택 ( input[type=image] )
:input폼 엘리먼트만 선택 ( input, select, textarea, button )
:notnot 필터
- 필터 결과가 반대로 나오게 함
- CSS 필터에서 지원
- jQuery 정의 셀렉터에서도 동작
- 필터 셀렉터에는 적용할 수 있지만 찾기 셀렉터에는 적용하지 못함
- 모두 콜론 문자(:)나 대괄호 문자([)로 시작
input:not(:checkbox)체크박스가 아닌 <input> 엘리먼트 선택
:parent빈 엘리먼트를 제외하고, 텍스트도 포함해서 자식 엘리먼트를 가지는 엘리먼트를 선택
:password패스워드 엘리먼트만 선택 ( input[type=password] )
:radio라디오 버튼 엘리먼트만 선택 ( input[type=radio] )
:reset리셋 버튼 선택 ( input[type=reset] 이나 button[type=reset] )
:selected선택된 엘리먼트만 선택
:submit전송 버튼을 선택 ( button[type=submit] 이나 input[type=submit] )
:text텍스트 엘리먼트만 선택 ( input[type=text] )
:visible보이는 엘리먼트만 선택
:checkbox:checked:enabled활성화되고 선택된 체크박스만 선택


필터 셀렉터 - 기준을 추가해서 일치하는 엘리먼트의 집합을 줄여나간다.
찾기 셀렉터 - 이미 선택된 엘리먼트와 맺은 관계를 통해 다른 엘리먼트를 찾는다. [ 자손 셀렉터(공백문자), 자식 셀렉터(>), 형제 셀렉터(+) ]가 있다.

커맨드 문법

size()확장 집합의 엘리먼트 개수를 반환
예제) $('a').size()
설명) 모든 <a> 타입의 엘리먼트의 개수를 반환
get(index)확장된 집합에서 하나 또는 모든 일치하는 엘리먼트. 매개변수가 명시되지 않았다면 모든 엘리먼트를 자바스크립트 배열로 반환
예제) $('img[alt]').get(0)
index(element)확장 집합에서 전달된 엘리먼트를 찾고, 집합에서 찾은 엘리먼트의 인덱스를 반환. 집합에 해당 엘리먼트가 존재하지 않으면 -1을 반환
예제) var n = $('img').index($('img#findMe')[0]);
add(expression)expression 매개변수로 명시한 엘리먼트를 확장 집합에 추가. 표현식에는 셀렉터, HTML, 코드, DOM 엘리먼트, DOM 엘리먼트 배열이 올 수 있음
예제1) $('img[alt]').add('img[title]')
예제2) $('img[alt]').addClass('thickBorder').add('img[title]').addClass('seeThrough')
설명2) alt 어트리뷰트를 가진 모든 <img>엘리먼트의 확장 집합을 생성한 뒤 두꺼운 테두리를 만드는 클래스를 적용. title 어트리 뷰트를 가진 <img> 엘리먼트를 추가하고, 마지막으로 투명도를 주는 클래스를 적용
not(expression)expression 매개변수의 값에 따라서 일치하는 집합에서 엘리먼트를 제거
예제) $('img[title]').not('[title*=puppy]')
설명) title 어트리뷰트를 지닌 모든 <img> 엘리먼트를 선택할 때, title 어트리뷰트 값이 puppy를 포함하는 엘리먼트를 제외
filter(expression)전달 받은 셀렉터 표현식이나 필터링 함수를 이용해서 확장 집합에서 엘리먼트를 필터링
예제) $('td').filter(function(){return this.innerHTML.match(/^\d+$/)})
설명) 모든 <td> 엘리먼트로 구성된 확장 집합을 생성한 다음 엘리먼트 각각에 대해 filter() 메서드에 전달된 함수를 호출
호출된 함수를 this값으로 현재 순회 중인 엘리먼트를 이용
전달된 함수는 정규 표현식을 사용하여 숫자로 내용이 구성된 패턴을 만족하는지 검사
필터 함수를 호출한 결과로 false를 반환하는 엘리먼트가 모두 확장 집합에서 제거
slice(begin, end)일치하는 집합에서 연속하는 일부분을 포함하는 새로운 확장 집합을 생성하고 반환
- begin : 반환되는 부분 집합에 포함될 첫 엘리먼트의 위치로, 0부터 시작
- end : 반환되는 부분 집합에 포함될 마지막 엘리먼트의 바로 다음 위치로, 0부터 시작하며, 생략하면 집합의 마지막까지 포함
예제1) $('*').slice(2,3);
설명1) 페이지에 있는 모든 엘리먼트를 선택한 다음 세 번째 엘리먼트를 담은 새로운 집합을 생성
예제2) $('*').slice(0,4);
설명2) 페이지에 있는 모든 엘리먼트를 선택한 다음 처음 네 개의 엘리먼트를 포함한 집합을 생성
예제3) $('*').slice(4);
설명4) 페이지의 모든 엘리먼트와 일치한 다음 처음 네 엘리먼트를 제외한 모든 엘리먼트의 집합을 반환
< 관계를 통해 새로운 확장 집합을 얻을 수 있는 메서드 >
children() - 확장 엘리먼트의 고유한 자식으로 구성된 확장 집합을 반환
contents() - 엘리먼트의 콘텐츠로 구성된 확장 집합을 반환. 텍스트 노드도 포함되며 주로 <iframe> 엘리먼트의 콘텐츠를 얻고자 사용
next() - 확장 집합 내의 각 확장 엘리먼트 바로 다음에 나오는 형제로 구성된 확장 집합을 반환
nextAll() - 확장 집합 내의 각 확장 엘리먼트 다음에 나오는 모든 형제로 구성된 확장 집합을 반환
parent() - 확장 집합 내에 있는 모든 확장 엘리먼트의 바로 위 부모로 구성된 확장 집합을 반환
parents() - 모든 확장 엘리먼트의 조상으로 구성된 확장 집합을 반환. 바로 위 부모와 상위의 모든 조상이 포함되지만 문서 루트(document root)는 포함되지 않음
prev() - 확장 집합 내의 각 확장 엘리먼트 바로 이전에 나오는 형제로 구성된 확장 집합을 반환
prevAll() - 확장 집합 내의 각 확장 엘리먼트 이전에 나오는 모든 형제로 구성된 확장 집합을 반환
siblings() - 확장 엘리먼트의 모든 형제를 포함하는 확장 집합을 반환
find(selector)원본의 모든 엘리먼트 중 전달된 셀렉터 표현식과 일치하는 엘리먼트로 구성된 새로운 확장 집합을 반환
예제) wrappedSet.find('p cite')
설명) 변수 wrappedSet에 할당된 확장 집합에서, 문단 <p>에 포함된 모든 인용문 <cite>로 구성된 확장 집합을 반환
is(selector)확장 집합에 전달된 셀렉터 표현식과 일치하는 엘리먼트가 있는지 확인. 엘리먼트가 하나 이상 셀렉터와 일치하면 true를, 그렇지 않으면 false를 반환
예제) var hasImage = $('*').is('img');
설명) 현제 페이지에 이미지 엘리먼트가 있으면 hasImage 변수의 값을 true로 설정
end()jQuery 커맨드 체인에서 사용하며 이전 확장 집합으로 돌아감
예제) $('img').clone().appendTo('#somewhere').end().addClass('beenCloned');
설명) 페이지의 모든 <img> 엘리먼트로 구성된 원본 확장 집합을 close() 메서드를 통해 복사본 확장 집합을 생성한 뒤, 복사본인 두 번째 확장 집합을 반환한다. 복사본 확장 집합에 appendTo() 커맨드를 수행한 뒤, end() 커맨드를 통해 현재 확장 집합(복사본 확장 집합)에서 앞으로 돌아가서 이전 확장 집합(원본 확장 집합)을 반환하고, 원본 확장 집합에 addClass() 커맨드를 수행
andSelf()커맨드 체인에서 


출처 : https://gpresss.blogspot.com/2013/12/blog-post_2.html


2018년 12월 6일 목요일

JavaScript - checkbox






[체크박스 전체 선택/해제]


<table>
  <colgroup>
     <col width="50" />
  </colgroup>
  <tr>
    <th><input type="checkbox" class="ckall" onclick="ckall(this)" /></th>
    <th>제목</th>
  </tr>
  <tr>
    <td><input type="checkbox" /></td>
    <td>무한도전</td>
  </tr>
  <tr>
    <td><input type="checkbox" /></td>
     <td>세바퀴</td>
  </tr>
  <tr>
    <td><input type="checkbox" /></td>
    <td>1박2일</td>
  </tr>
</table>



function ckall(o){
  var ck = $(o).prop("checked");  // 선택한 체크박스의 상태가 checked 이면 true 아니면 false를 반환합니다.
  if(ck){  // true 이면
    $("table input").prop("checked", true); //table 안에 포함된 input 상태값을 체크한다.
  }else{ // false 이면
    $("table input").prop("checked", false); //table 안에 포함된 input 상태값을 체크해제한다.
  }
}



function ckall(o){
  var ck = $(o).prop("checked");  // 선택한 체크박스의 상태가 checked 이면 true 아니면 false를 반환합니다.
  $("table input").prop("checked", ck); //table 안에 포함된 input 상태값을 체크
}




2018년 8월 14일 화요일

JavaScript - $.each (일괄 체크)



var checkLength = {
Ven_ID : "공급사코드",
Ven_UID : "공급사아이디",
Ven_Name : "공급사명",
Ven_Delv_Set : "최소발주금액",
Ven_Delv_Price : "배송비용",
Ven_Zip1 : "주소",
Ven_Zip2 : "주소",
Ven_Addr1 : "주소",
Ven_Addr2 : "주소",
Ven_Tel : "전화번호",
Ven_Fax : "팩스번호",
Ven_Email : "이메일",
Ven_Clerk : "담당자명",
Ven_Chief : "대표자명",
Ven_Biz_Num : "사업자등록번호",
htel2 : "핸드폰번호",
htel3 : "핸드폰번호"
};

var rtnFunc = false;

$.each(checkLength, function(index, value){
var ctrl = $("input:text[name='" + index + "']");
if (alltrim(ctrl.val()).length == 0) {
alert(value + "을(를) 정확히 입력해 주십시오.");
ctrl.focus();
rtnFunc = true;
return false;
}
});

if (rtnFunc) {
return;
}




2018년 7월 2일 월요일

javascript - jquery.Jcrop (이미지 자르기 기능)


jquery.Jcrop


<%
Option Explicit
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1
Session.CodePage = "949"
Response.Charset ="euc-kr"

Dim isResize, returnCtrlId
returnCtrlId = Request("ReturnCtrlId")

If returnCtrlId = "" Then
Response.write "<script>alert('파라미터가 잘못되어있습니다'); close();</script>"
Response.End
End If

isResize = Request("IsResize")

If isResize = "" Then
isResize = "false"
End If

isResize = LCase(isResize)
%>
<!DOCTYPE html>
<html>
<head>
<title>이미지 선택</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr"" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<link rel="stylesheet" href="/css/jquery.Jcrop.min.css" type="text/css" />
<style type="text/css">
* {border:0;margin:0;padding:0;vertical-align:middle}
.popup_upload_tool {width:600px;font-family:dotum;font-size:12px;line-height:16px;color:#444}
.popup_upload_tool .header_upload_tool {height:35px;background-color:#ff6565}
.popup_upload_tool .header_upload_tool p.title {padding:11px 0 0 15px;font-weight:bold;font-size:14px;color:#fff}
.popup_upload_tool .body_upload_tool {padding:15px}
.body_upload_tool .image_original input[type='file'] {margin-left:10px;width:300px}
.body_upload_tool .image_save {border-top:1px solid #333;margin-top:15px;padding-top:15px}
.body_upload_tool .image_original > label,
.body_upload_tool .image_save > span.title {font-weight:bold}
.body_upload_tool p.image_area {margin:10px 0;padding:10px 0;background-color:#f4f4f4;text-align:center}
.body_upload_tool .btn_area {text-align:center}
.body_upload_tool .btn_area button.btn_on {width:105px;height:33px;background-color:#e63c3c;font-weight:bold;font-family:dotum;font-size:14px;line-height:33px;color:#fff;text-align:center;vertical-align:middle;outline:0;cursor:pointer}
.body_upload_tool .btn_area a.btn_off {display:inline-block;border:1px solid #8d8d8d;margin-right:10px;width:105px;height:31px;background-color:#fff;font-weight:bold;font-family:dotum;font-size:14px;line-height:33px;color:#666;text-decoration:none;text-align:center;vertical-align:middle}
</style>
<script src="/script/Jquery/jquery-1.9.1.js"></script>
<script src="/script/Jquery/jquery.Jcrop.min.js"></script>
<script type="text/javascript">
var imageMinSize = [500, 398];
var coordinate;
var jcrop_api;
var reader;
var isApply;
var isResize = <%=isResize%>;
var returnCtrlId = '<%=returnCtrlId%>';
var canvas;
var imgFileName;

$(document).ready(function() {
//validation
if (!document.getElementById("fileImg").files || !FileReader) {
alert("익스폴로러 10이상 버전에서 가능합니다.");
    close();
return false;
}

clearCoords();

//FileReader 초기화
reader = new FileReader();
reader.onload = function (e) {
var target = document.getElementById("target");
target.removeAttribute('style');
target.setAttribute("src", e.target.result);
};

$("#fileImg").on("change", function (e) {
var imgFile = e.target;
var extentsion = imgFile.value.replace(/^.*\./, '').toLowerCase();
if($.inArray(extentsion, ['jpg', 'jpeg', 'png', 'bmp']) == -1) {
alert('jpg, jpeg, bmp, png 파일만 업로드 할수 있습니다.');
return false;
}

clearCoords();

if(jcrop_api) {
jcrop_api.destroy();
}

reader.readAsDataURL(document.getElementById('fileImg').files[0]);
});

$('#target').on('load', function() {
if(this.width < imageMinSize[0] || this.height < imageMinSize[1]) {
this.removeAttribute('src');
alert("원본사이즈가 너무 작습니다.\n가로 " + imageMinSize[0] +"px * " + imageMinSize[1] + "px 이상의 이미지를\n첨부 후 영역을 저장해 주세요.");
return false;
}

imgFileName = document.getElementById('fileImg').files[0].name;

$('#target').Jcrop({
onChange: onChangedCrop,
onSelect: onChangedCrop,
onRelease: clearCoords,
aspectRatio: imageMinSize[0] / imageMinSize[1]
}, function() {
jcrop_api = this;
});
});

canvas = new Array();
canvas[0] = document.getElementById('cLImage');

if(isResize) {
canvas[1] = document.getElementById('cMImage');
canvas[2] = document.getElementById('cSImage');
}
});

function onChangedCrop(c) {
coordinate.x1 = c.x;
coordinate.y1 = c.y;
coordinate.x2 = c.x2;
coordinate.y2 = c.y2;
coordinate.width = c.w;
coordinate.height = c.h;
}

function clearCoords() {
coordinate = {x1: null, y1: null, x2: null, y2: null, width: null, height: null};
}

function saveImage() {
if(!isApply) {
alert("자르기를 해주세요");
return false;
}

if(!opener) {
alert("opener가 존재하지 않습니다.");
return false;
}

if(confirm("적용된 이미지를 사용하겠습니까?")){
var openerCtrlIds = [returnCtrlId + 'L', returnCtrlId + 'M', returnCtrlId + 'S'];

for (var idx in canvas) {
var ctrl = canvas[idx];
var openerCtrl = opener.document.getElementById(openerCtrlIds[idx]);
openerCtrl.value = ctrl.toDataURL("image/jpeg").replace('data:image/jpeg;base64,', '');
}

opener.document.getElementById(returnCtrlId).value = imgFileName;
close();
}
}

function applyImage() {
if(coordinate.x1 == null) {
alert("이미지를 크롭해주세요.");
return false;
}

var img = document.getElementById("target");

for (var idx in canvas) {
var tempCv = canvas[idx];
var context = tempCv.getContext('2d')
context.drawImage(img,coordinate.x1,coordinate.y1,coordinate.width,coordinate.height,0,0,tempCv.width,tempCv.height);
}

isApply = true;
}
</script>
</head>
<body>

<!-- 가로 600px : 가로 사이즈를 늘리고 싶으시면 .popup_upload_tool {width:600px 이 부분을 변경하세요. -->
<div class="popup_upload_tool">
<div class="header_upload_tool">
<p class="title">이미지 업로드 툴</p>
</div>
<div class="body_upload_tool">
<!-- 원본 이미지 -->
<div class="image_original">
<label for="fileImg">원본 이미지</label><input type="file"  id="fileImg" />
<p class="image_area"><img id="target" alt="자를 이미지" /></p>
<div class="btn_area">
<button type="button" class="btn_on" onclick="applyImage();">자르기</button>
</div>
</div>
<!-- 저장 이미지 -->
<div class="image_save">
<span class="title">저장 이미지</span>
<p class="image_area">
<canvas id="cLImage" width="500px" height="398px" style="border:1px solid black;"></canvas>
<canvas id="cMImage" width="126px" height="100px" style="display:none;"></canvas>
<canvas id="cSImage" width="88px" height="72px" style="display:none;"></canvas>
</p>
<div class="btn_area">
<a href="#" class="btn_off" onclick="self.close();">닫기</a>
<button type="button" class="btn_on" onclick="return saveImage();">영역 저장</button>
</div>
</div>
</div>
</div>

</body>
</html>





MSSQL - Cursor vs Temp Table

#테이블 변수사용의 예 use pubs go declare @tmptable table (     nid int identity(1,1) not null,     title varchar (80) not null ) -- 테이블 변수 선언 inse...