작업 노트
게시판 검색 - 검색어 하일라이트 본문
전체 소스코드 : https://github.com/imtaekh/my_app/tree/9f46aeefad36f701b0db8e3348c4ead2489b525a
테스트 사이트 : https://azure0777board.herokuapp.com
게시판 검색의 마지막 포스팅은 검색어 highlight입니다. 검색이 제대로 되고 있는지 쉽게 알 수 있죠.
searchType에 맞춰서 제목, 본문, 작성자의 이름에 검색어가 일치하는 부분을 자바스크립트를 써서 highlight합니다.
routes/posts.js입니다.
어차피 검색기능의 일부니까, search object를 만들때 highlight를 같이 보내줍니다.
이미 index, show action에서 이 object를 view로 쏴주고 있으니, 해당 view에서 data를 이용해 주기만 하면 됩니다.
title, body, author가 표시되는 부분에 highlight class를 추가해 주고, data-highlight속성에 highlight할 text를 넣습니다.
highlight class를 찾아서 highlight해 주는 javascript를 만듭니다.
기본 원리는 해당 text를 찾아서 <span class='searchHightlight'></span>를 씌워주는 건데, 7,8번째 줄은 html 삽입을 막는 용도로 쓰였습니다. 현재 게시판 본문, 제목등에 html 코드를 직접 입력하더라도 적용되지 않게 되어 있는데, span를 넣어야 해서 <를 <로, >를 >로 바꾸어 주는 것이죠.
regex match를 한 결과는 배열로 나오는데, 동일한 결과도 같이 나오니까 같은 결과값은 지우는 distinct함수를 만들었습니다.
예를들어 match결과가 ["test","Test","test"]인 경우 ["test","Test"]로 중복 결과를 지우는 역할입니다.
newText = newText.replace(new RegExp(match, "ig"), "<span class='searchHighligt'>"+match+"</span>");로 한번에 하지 않는 이유는..
본문의 대소문자를 유지하기 위해서 이런 방법을 택했습니다.
searchText가 "test"인 경우 위의 방법으로 치환하게 되면, 본문의 글자가 "test" 인 경우 뿐만 아니라 "Test" 나 "TEST" 인 경우에도 모두 "test"로 바꿔버리게 되죠. 더 깔끔한 방법 아시는 분은 제보 바랍니다.
이 js파일을 head에 넣어주면 끝입니다.
참고로 highlight.js는 IE9이상에서만 작동합니다. IE빨리 다 사라졌으면 좋겠어요 ㅠㅠ
검색기능은 이걸로 끝입니다. (작성자 이름 클릭해서 검색하는 기능은 나중에...)
'javascript > w3schools nodejs' 카테고리의 다른 글
게시판 댓글 추가 기능 (0) | 2017.02.23 |
---|---|
게시판 조회수, 게시물 번호 추가 (0) | 2017.02.23 |
게시판 검색 - 작성자 (0) | 2017.02.23 |
게시판 검색 기능 (0) | 2017.02.23 |
페이지 버그 수정 및 post의 index action 수정 (0) | 2017.02.23 |