반복출력 되는 li 속 a태그 텍스트를 순차적으로 특정 영역에 있는지
CMS/프레임워크 | Rhymix 1.9 |
---|---|
개발 언어 | PHP 7.2 |
https://xetown.com/topics/1480956#comment_1481053
위 댓글 언급 관련 작업을 시도해 보고 싶은데 javascript 기초가 없다보니 아이디어는 있는데 코드를 작성을 못하겠네요.
<li class="ap_menu_search_menu" id="ap_menu_search_111751">
<span class="star" style="display:none;color: #f9c537;"><i class="fas fa-star"></i> </span>
<a href="/board_req">게시판 요청</a>
</li>
위와 같은 li 가 반복이됩니다.
#prmymenu li a 여기에 회원마다 즐겨찾기 메뉴명이 설정한 갯수 만큼 출력이 되고 있습니다.
위 "게시판 요청" 텍스트가 #prmymenu li a 에 있는지 확인을 해서 있다면 id="ap_menu_search_111751" 의 .star의 'display', 'unset' 을 해주는 작업을 해야 합니다.
이 작업이 li 숫자만큼 박복이 되어야 합니다.
.ap_menu_search_menu 를 갯수를 확인하면 li 갯수가 나옵니다.
.ap_menu_search_menu 의 id 값을 배열에 담아야 할 것 같긴한데 그 배열의 값 갯수를 확인해도 li 갯수는 동일하게 나올 것 같구요.
반복문으로 위 배열에 담은 값을 반복해서 돌려가면서 #prmymenu li a 에 값이 있는지 있다면 그에 맞는 id 의 .star의 'display', 'unset' 을 해주고 없다면 그냥 넘어가고 하면 될 것 같습니다.
염치 없이 코드 전체를 요청하는 꼴이 되었는데 혹시 도움 주시면 시도해 보겠습니다.
댓글 6
즐겨찾기 메뉴들의 href 값과 메뉴 찾기 위젯 목록들의 href 값이 동일한 형식이어서 상호 비교가 가능하다면요.
(물론 a태그의 text로도 비교가 가능할 거 같기는 한데 혹시라도 같은 이름을 쓰는 메뉴들이 있을 수도 있으니까 href가 더 적당할 것 같습니다.)
그러려면 우선,
빈 배열 변수 만들고, #prmymenu li a 를 루프 돌려서, 각 요소의 href 속성값을 배열 변수에 push해줘야겠구요.
그런 다음,
(배열 변수가 빈 변수가 아니라는 조건을 달아서)
.ap_menu_search_menu를 루프 돌려서, $(this).children('a')의 href 속성값이 만들어뒀던 배열 변수에 포함되어 있으면 $(this).children('span').show(); 해주면 될 것 같다는...
답변감사합니다.
herf로 하던 text로 하던 동일할 것 같은데요. 루프를 돌려서 확인하고 하는 코드작성이 어려워 글을 작성하게 되었습니다.
반복없이 일괄적으로 처리하는 방식은 검색으로 처리를 해서 해결을 했는데 한 화면에 반복이 되는 것을 처리하려니 어려워서요.
// Extract Paragraphs with Regulr Expression
var ps = x.find('div:not(:has(p)), p').filter(function () {
return $(this).text().match(url_regex);
});
if (ps.length < 1) return;
// Make URL Array without Exceptive Domain
var urls = [];
if (ap_parser_exception) ap_parser_exception = ap_parser_exception.split(',');
ps.each(function (i) {
var matches = $(this).text().match(url_regex);
for (n = 0; n < matches.length; n++) {
var _exp = true;
if (ap_parser_exception.length > 0) {
$.each(ap_parser_exception, function (idx, val) {
if (matches[n].indexOf(val) != -1) _exp = false;
});
}
if (_exp == false) {
urls.push(matches[n]);
// Insert Preview Container
$(this).after(ap_parser_output);
}
}
});
요 코드 같은데 봐도 응용 자체가 안되네요 ㅜㅡ
저도 바로 쓴 거라 오류가 있을지 모르겠습니다.
var mymenus = [];
$('#prmymenu li').each(function() {
mymenus.push($(this).text());
});
if ( mymenus && mymenus.length ) {
$('.ap_menu_search_menu').each(function() {
if ( $.inArray($(this).children('a').text(), mymenus) != -1 ) {
$(this).children('span').show();
}
});
}
감사합니다. 위젯 스킨에 스크립트 추가해서 잘 됩니다.
function xxxxx(val) {
$("#prmymenu li.ap_menu_search_menu").each(function (index, item) {
if($(item).find("a").html() == val) {
$(item).find("span.star").css({"display":"unset"});
}
});
}
xxxxx("게시판 요청");
뭐 대강 이런식입니다. 댓글창에 바로 쓴거라 어딘가 오류가 있을수도 있어요.
잠이 덜 깨서 원하시는 동작이 이게 맞는지는 모르겠네요.