Post

<body>

  <iframe id=“iframeA” src=“test.html”></iframe>

</body>



// iframe 접근

window.frames.length; // 1

window.frames[0].document; // iframe의 window의 document객체

document.getElementById('iframeA'); // iframe 엘리먼트

document.getElementById('iframeA').contentWindow.document; // iframe의 window의 document객체




// iframe객체의 window

$('iframe').get(0).contentWindow   // window




// iframe객체의 document

$('iframe').get(0).contentDocument // document

// 또는 

$('iframe').get(0).contentWindow.document   // document




// 부모html에서 자식iframe 함수 실행

$('#iframe').get(0).contentWindow.함수명;

$('#iframe')[0].contentWindow.함수명;




// 부모html에서 자식iframe 변수접근

$('#iframe').get(0).contentWindow.변수명;




// 부모html에서 자식iframe 접근, 제어  // jQuery

$('#iframe').contents().find('#foo').text('안녕하세요');




// 자식iframe에서 부모 html 변수, 함수 호출

window.parent.변수명; // 한단계 부모  // 그렇다면 두단계 부모는??  window.parent.parent.변수명

window.top.변수명; // 최상위 부모 // html(최상위) -> iframe -> iframe - iframe(자식) (여기에서 top을 쓰면 최상위 부모로 접근, parent를 쓰면 바로위 iframe에 접근)




// iframe 이전페이지로

$('iframe').get(0).contentWindow.history.go(-1);      




// iframe 새로고침

$('iframe').get(0).contentDocument.location.reload();




// iframe 로드

$('iframe').load(function(){    // iframe이 모두 load된후 제어

    $(this).contents().find('body');

});




// 자식iframe에서 부모html의 다른 iframe에 접근

$('제어할 아이디', parent.frames["부모창 제어할 frame의 name값"].document).html("여기도 제어한다.");




// 자식iframe에서 부모html 접근 (최상위 부모html에 접근된다.)

$('부모창 제어할 아이디', parent.document).contents().find('body').html(); // $('부모창 제어할 아이디', parent.document) -> $('#ID이름',top.document)로 변경해도 된다.


// 팝업창에서는??? opener

$("#id",opener.document).css("display","none");




// 현재창이 iframe인지 여부 확인

// self는 iframe

// top은 self를 포함하는 부모페이지(최상위)

console.log(self == top)





// html -> iframe -> iframe -> iframe 이런 구조일 경우

// 자식iframe 한단계 윗 부모html(iframe)에 접근하기


window.frameElement     // iframe   또는  this.frameElement 

.parentNode                // 부모 


<div>

    <iframe src="sub.html"></iframe>

</div> 

window.frameElement.parentNode // 자식iframe을 감싸는 부모는 div가 된다.

if(!window.frameElement){ console.log('최상위 프레임'); }  // 요소(node)가 iframe이 아닐경우에는 최상위(root)부모 html 이다.




// 부모에서 -> 자식 iframe body에 걸려있는 이벤트 trigger("이벤트명", "전달객체")

$('#iframe2')[0].contentWindow.$('body').trigger('eventEvnt', {"a": "홍길동"});

document.getElementById('iframe2').contentWindow.$('body').trigger('eventEvnt', {"a": "홍길동"});     


   


// 자식에서 -> 부모 iframe body에 걸려있는 이벤트 trigger("이벤트명", "전달객체")

// this.$('div')   // 이런개념 this(window)는 생략 가능하므로.. 다른 iframe에선 명시적으로 (top, parent)앞에 붙여준다.

top.$('body').trigger('eventname', {"a" : "홍길동"});            // 최상위 iframe 접근 (root개념)

parent.$('body').trigger('eventname', {"a" : "홍길동"});         // 한단계 위 부모 iframe 접근

parent.parent.$('body').trigger('eventname', {"a" : "홍길동"});  // 두단계 위 부모 iframe 접근





// 부모에 jQuery 가 로딩되어 있다면 굳이 다시 로딩 할 거 없이 이렇게 

(function($, f) { 

    $(function() { 

        $(f).closest('form').find('[name=image]').val("test"); 

    }); 

})(parent.jQuery, window.frameElement); 




 

// 속성줄때 

.appendTo($('#ID이름', parent.document))       // 이렇게하면 ID를 못찾는다

.appendTo($(top.document).find("# ID이름"));  // 이런식으로 속성주면 된다





윈도우객체, iframe 참고 : http://ohgyun.com/531



출처 : http://mylife365.tistory.com/10

Post

브라우저 지원사항

  • IE 모든 브라우저 지원
  • Chrome 단축키 알림을 띄움
  • Opera 단축키 알림을 띄움
  • Firefox 지원
  • Safari 테스트 못해봄


$(document).ready(function(){

  $(셀렉트).on('click', function(e) {  

    var bookmarkURL = window.location.href;

    var bookmarkTitle = document.title;

    var triggerDefault = false;


    if (window.sidebar && window.sidebar.addPanel) {

        // Firefox version &lt; 23

        window.sidebar.addPanel(bookmarkTitle, bookmarkURL, '');

    } else if ((window.sidebar && (navigator.userAgent.toLowerCase().indexOf('firefox') < -1)) || (window.opera && window.print)) {

        // Firefox version &gt;= 23 and Opera Hotlist

        var $this = $(this);

        $this.attr('href', bookmarkURL);

        $this.attr('title', bookmarkTitle);

        $this.attr('rel', 'sidebar');

        $this.off(e);

        triggerDefault = true;

    } else if (window.external && ('AddFavorite' in window.external)) {

        // IE Favorite

        window.external.AddFavorite(bookmarkURL, bookmarkTitle);

    } else {

        // WebKit - Safari/Chrome

        alert((navigator.userAgent.toLowerCase().indexOf('mac') != -1 ? 'Cmd' : 'Ctrl') + '+D 를 이용해 이 페이지를 즐겨찾기에 추가할 수 있습니다.');

    }


    return triggerDefault;

});

});

Post

모바일 스크롤막기
방법 1번
바디 스크롤 방지 : $("body").bind('touchmove'function(e){e.preventDefault()});
바디 스크롤 해제 : $("body").unbind('touchmove');
방법 1번 사용방법

$('셀렉트').on('click',function(e){

e.preventDefault();

$(팝업창).fadeIn();

$("body").bind('touchmove'function(e){e.preventDefault()});

});

방법 1번 해제방법

$('셀렉트').on('click',function(e){

e.preventDefault();

$(팝업창).fadeOut();

$("body").unbind('touchmove');

});



방법 2번
스크롤 방지  : $('html, body').on('scroll touchmove mousewheel', function(event) {
event.preventDefault();
event.stopPropagation();
return false;
});
스크롤 해제 :  $('html,body').off('scroll touchmove mousewheel');



방법 2번 사용방법

$('셀렉트').on('click',function(e){

e.preventDefault();

$(팝업창).fadeIn();

$('html, body').on('scroll touchmove mousewheel', function(event) {

event.preventDefault();

event.stopPropagation();

return false;

});

});


방법 2번 해제방법

$('셀렉트').on('click',function(e){

e.preventDefault();

$(팝업창).fadeOut();

$('html,body').off('scroll touchmove mousewheel');

});



'javascript, jQuery' 카테고리의 다른 글

iframe 접근방법  (0) 2018.03.23
자바스크립트 즐겨찾기  (0) 2018.03.21
가장 많이 쓰이는 벨리데이션  (0) 2018.03.21
모바일기기 인식 스크립트  (0) 2018.03.21
콤마 추가 및 제거  (0) 2018.03.21

Post

벨리데이션
★ 한글만 가능
var regKo= /[\ㄱ-ㅎㅏ-ㅣ가-힣|\u119E\u11A2,^\s+|\s+$]+$/gi;
★ 영문만 가능
var regEn = /^[a-zA-Z]+$/; 

★ 한글 영문만 가능
var regName = /^[가-힣a-zA-Z]+$/; 

★ 숫자,알파벳만 가능
var regId = /^[a-zA-Z0-9]+$/;

★ 숫자 영문 특수문자만 가능
var regPw = /^(?=.*[a-zA-Z])(?=.*[!@#$%^*+=-])(?=.*[0-9]).{5,12}/; 

★ 이메일 
var regEmail = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/; 

★ 전화번호
var regTel = /^[0-9]{2,3}-[0-9]{3,4}-[0-9]{4}$/; 

★ 도메인 형태, http:// https:// 포함안해도 되고 해도 되고
var regDomain = /^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/;

★ 도메인 형태, http:// https:// 꼭 포함
var regDomain2 = /^((http(s?))\:\/\/)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/;


사용법 
변수명.test($(셀렉트).val());

'javascript, jQuery' 카테고리의 다른 글

자바스크립트 즐겨찾기  (0) 2018.03.21
레이어 팝업시 스크롤 터치스크롤 막기  (0) 2018.03.21
모바일기기 인식 스크립트  (0) 2018.03.21
콤마 추가 및 제거  (0) 2018.03.21
웹접근성 gnb메뉴  (0) 2018.03.21

Post

UserAgent를 통한 모바일 인식 자바스크립트 - 모바일 테블릿 pc 인식

if(navigator.userAgent.match(/Mobile|iP(hone|od)|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/)){

  //스마트폰일 때 실행 될 스크립트

}

User agent에는 사용자 기기에대한 정보도 들어있기 때문에, 모바일환경을 인식할 수 있습니다.

위의 코드를 사용하면 태블릿을 제외한 스마트폰에서만 스크립트를 실행할 수 있습니다.



if(navigator.userAgent.match(/Android|Mobile|iP(hone|od|ad)|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/)){

  //모바일(스마트폰+태블릿)일 때 실행 될 스크립트

}

이 코드는 안드로이드 태블릿과 아이패드 정보가 추가된 스크립트입니다.





만일 모바일을 제외한 PC에서만 실행할 스크립트는 다음처럼 작성하면 됩니다.

if(!navigator.userAgent.match(/Mobile|iP(hone|od)|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/)){

  //태블릿,PC에서만 실행 될 스크립트

}

if(!navigator.userAgent.match(/Android|Mobile|iP(hone|od|ad)|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/)){

  //PC에서만 실행 될 스크립트

}


Post

숫자만 입력하는 폼에 자동으로 콤마를 적용 시켜주는 함수

(숫자 외 입력 안됨)


<script>
/* 콤마 추가 */
function comma(str) {
    str = String(str);
    return str.replace(/(\d)(?=(?:\d{3})+(?!\d))/g, '$1,');
}
/* 콤마 제거 */
function uncomma(str) {
    str = String(str);
    return str.replace(/[^\d]+/g, '');
}
/* input 콤마 바로 적용 */
function inputNumberFormat(obj) {
    obj.value = comma(uncomma(obj.value));
}

</script>


사용법 onkeyup="inputNumberFormat(this)"



Post

키보드 tap키로도 하위 뎁스영역까지 포커스가 되어야 웹접근성에 어긋나지 않는다.


/* gnb */
$(function(){
var gnb = $('.gnb'); // nav태그 클래스값입력
gnb.find('>ul>li>a')
  .on('mouseenter',function(e){
    e.preventDefault();
    gnb
      .find('>ul>li>.gnb_list2:visible') // 2뎁스 클래스명
      .hide()
      .parent('li')
      .removeClass('on'); // css에서 on이라는 클래스값을 입력
    $(this)
      .next('.gnb_list2:hidden') // 2뎁스 클래스명
      .show()
      .parent('li')
      .addClass('on');
  })
  .focus(function(){
    $(this).mouseover();
  })
  .end()
  .mouseleave(function(){
    gnb
      .find('>ul>li>.gnb_list2') // 2뎁스 클래스명
      .hide()
      .prev('a')
      .parent()
      .siblings()
      .removeClass('on');
  })
    .find('li').last().find('.snb-tit2').focusout(function(){ // 마지막 gnb 2차메뉴에서 마우스를 벗어나을때 사라진다.
          $(this).mouseleave();
      });
});

Post

scrollTop 기능
- 해당태그 클릭시 부모요소를 브라우저 top:0으로 이동
$(function() {
        $("셀렉트").on("click",function(event){ 
                event.preventDefault();
                $('html,body').animate({scrollTop:$(this).patent().offset().top}, 500);
        });
});

▲ top