편집 가능한 엘리먼트에 자동 완성으로 링크 추가하기

Q. 자동완성기능 textarea에 <a>태그적용



AJAX를 이용해 자동완성검색기능을 구현하였습니다 그러나 제가원하는 대로 되지않아 이렇게 질문을 올립니다.
페이스북 태그처럼 구현하고있는데 자동완성검색어를 클릭시 textarea태그에 <a>태그가 걸어져서 나오는
즉, 안녕하세요 admin 처럼 나오게하고싶습니다
textarea 태그에 아무리 찾아보아도 안에 태그를 적용할수없다는 지식만나옵니다 정말 textarea 태그안에 <a> 태그를 적용할순없나요
꼭 완성하고싶은데..다른방법이있다면 어떤말법이있을까요 div태그 도 사용해보았지만 글자를 입력할수있는 창이 나오지않아 div 태그도 못쓰고..

A.DIV 태그에 contenteditable 속성을 사용 하세요.

학인하신 것처럼 textarea 에 태그를 입력해봐도 <a>링크</a> 태그가 그대로 보이며, 당연히 이 링크가 동작 하지도 않습니다.

답변을 먼저 드리면, DIV 같은 일반 태그에 contenteditable 속성을 설정 하면 가능합니다.

contenteditable 속성

HTML5 오픈 레퍼런스의 설명을 참고 하세요.

태그에 contenteditable=”true” 라고 속성을 설정 하면 해당 엘리먼트의 내용을 편집할 수 있게 됩니다.

여기를 수정 해보세요 …

contenteditable 엘리먼트에 HTML 추가

그리고, textarea 에서는 불가능하지만 contenteditable=”true” 로된 엘리먼트에서는 HTML 태그도 사용 가능하며 추가된 HTML 엘리먼트의 내용도 수정 가능 합니다.

여기에 링 to the 크 추가

div 에 자동 완성 기능 추가

질문을 보면 jquery-ui 를 이용해 자동 완성을 구현한 것 같은데, div 에도 자동완성 기능을 붙일 수 있습니다.

시도해 봤는데 안된다면 jquery-ui가 지원하지 않는 거니까 다른 라이브러리를 찾아보셔도 될 것 같습니다.

실제로 페이스북의 답글 다는 영역을 확인해보면 아래 처럼 div에 contenteditable=”true” 를 사용하고 있습니다.

facebook 댓글 영역

그리고, 이 답변을 준비 하면서 실제로 가능한지 직접 div에 자동 완성 기능을 붙여 봤습니다. 데모 보기

추가된 링크 클릭 가능하게 하기

위에서 contenteditable=”true” 엘리먼트에 링크를 추가했는데요, 클릭 해보면 링크 문구를 수정 할 수 있게 커서가 위치하지만, 링크가 동작하지는 않습니다. 만약, 추가된 링크를 동작 하게 하려면 아래 처럼 <a> 태그에는 contenteditable=”false” 를 설정 합니다.

동작하는 링크 추가

추가된 링크는 클릭 할 수는 있지만 수정 할 수는 없습니다. 이게 질문 의도에 가장 부합하는 방식일 것 같네요.

건투를 빕니다.

참고

데모를 만들어 봤습니다.

자동 완성 기능을 직접 만들어 보느라 소스가 길어졌습니다.

데모 보기

시연 영상 입니다.

자바스크립트에서 키보드 연속입력 부드럽게

Q. 자바스크립트에서 키보드 연속입력 부드럽게

1.자바스크립트안에서 한 캐릭터를 키보드를 꾹 눌러 움직이게 했을때
부드럽게 움직이지않고 딱 딱딱 딱딱딱딱딱딱딱 흐름으로 움직이는데요
키보드를 꾹눌러서 이동을해도 부드럽게 움직이는방법이 궁금합니다.

2. 캐릭터를 2마리 생성시켜 한 키보드에서 같이 움직인다했을때.
두 캐릭터가 동시에 움직이면 한 캐릭터만 움직이게됩니다 (키보드입력이 씹혀서)
키보드 동시 키 입력할수있는 방법도 궁금합니다.

A1. 키보드로 캐릭터 이동 부드럽게 하기 아래 코드들은 jQuery를 기반으로 합니다.

보통은 아래와 같은 코드로 캐릭터를 움직이도록 합니다.

키 이벤트를 잡아서 각 키가 눌렸을때 캐릭터를 이동 시키는건데요. 키를 누르고 있는 경우 키반복은 사용자 컴퓨터에 따라 다르게 반응할겁니다. 키보드 설정에 따라 달라질 수 있겠죠. 어찌 되었든 원하는대로 스무드~ 하게 움직여주지는 않습니다.

원하는대로 캐릭터가 부드럽게 움직이게 하는 문제는 타이머를 사용해 해결할 수 있는데요 아이디어는 간단합니다.

1. 키를 누르면 해당 키가 눌렸다는 정보를 저장 합니다.
2. 키를 놓으면 해당 키가 눌렸다는 정보를 해제 합니다.
3. 타이머를 이용해 주기적으로 (아주 짧게 아래 예에서는 0.01초) 어떤 키가 눌려 있는지 검사해서 눌려 있는 키에 대한 행동을 지정 합니다.

코드는 아래와 같습니다.

데모를 확인해 보세요. 데모 보기 어때요 ? 원하는대로 움직이나요 ?

A2. 캐릭터 2마리(?)를 동시에 움직이기

위의 방법을 사용하면 2마리도 동시에 움직일 수 있습니다.

추가로, 대각선으로도 움직일 수 있습니다.

이상, 건투를 빕니다.