cellion
402
2018-04-09 17:47:25 작성 2018-04-09 18:00:16 수정됨
2
589

jQuery 문자열로 객체 생성 시 질문입니다.


사용자가 입력한 태그중에 원하는 태그만 innerHTML 로 뿌려주려고 합니다.

예를들어 입력 받는 태그 중 img만 받게 설정하여 다음과 같이 입력받고

<img src="notfound" onerror="alert('a')">


출력 화면에서 태그 문자열을 받아 jquery 로 생성 시 onerror 의 함수가 실행되는 문제가 있습니다.

$('<img src="notfound" onerror="alert('a')">');


그랬을때 하고싶은건

1. onerror 실행 없이 jQuery 객체 생성(jQuery 객체 생성 후 요소 검사하여 src 이외의 attribute 제거 하기 위함)

2. 혹은 객체생성을 하지않고 특정 attribute 제외 제거(img의 경우 src 이외의 attribute 제거, div의 경우 class 등..) 


단순 onerror의 문자열만 지운다고 하기엔 onblur onmouseover등 이벤트가 많아서 전부 지우기는 어려울것으로 생각돼 허용되는 요소 빼고는 삭제하려고 합니다.


도움부탁드립니다.






0
0
  • 답변 2

  • zzinkun
    436
    2018-04-09 18:55:53

    아래 엘리먼트에 사용자가 태그를 입력한다고 가정하면,

    <input type="text" id="inputText" value=""/>


    다음과 같이 태그의 텍스트를 가져오겠죠..

    var inputTextStr = $("#inputText").val();


    바로 jQuery 객체로 변환하면 

    $(inputTextStr); => alert 이 뜰겁니다.


    미리 불필요한 모든 attribute 를 지워버리세요.


    예를 드시것처럼 입력한 태그가 img 태그라고 한다면 

    if ( inputTextStr.startsWith("<img") ) {

    $result = $(inputTextStr).removeAttr("onerror").removeAttr("onclick"); // .. 등등등

            console.log($result[0]); // 확인~

    }


    $result[0] 을 출력해보면

    <img src="notfound"> 만 남아있겠네요..


    하고 보니 지저분하네요 ㅎㅎㅎ


    removeAttr 로 속성을 제거하실때 필요한 속성이 아닌것을 지울수 있다면 깔끔하겠네요.

    0
  • cellion
    402
    2018-04-10 08:56:39

    $result = $(inputTextStr).removeAttr("onerror").removeAttr("onclick"); // .. 등등등


    이 구문에서 

    $(inputTextStr) 이렇게 선언하는 순간 alert이 뜬다는 얘기였는데


    바로 removeAttr 해주니까 함수 실행이 안되네요


    답변감사합니다.


    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.