2015-03-30 4 views
0

Попытка получить последнюю часть URL-адреса в довольно странной структуре html. Не спрашивайте, почему он построен именно так. Это очень хорошая причина.Получить последнюю часть URL-адреса

HTML, выглядит следующим образом

<li class="lifilter"><input type="checkbox" class="filtercheck" id="Cheeks..."> 
    <label for="Cheeks..."> 
     <a href="/collections/cheeks">Cheeks</a> 
    </label> 
</li> 

и JS я пытаюсь использовать

$('#Cheeks... label a').each(function(){ 
     var lasturl = $(this).attr('href'); 
     var urlsplit = url.split("/"); 
     var finalvar = urlsplit[4]; 
     $(this).addClass(finalvar); 
}); 

редактирования: блин .. я могу только отправлять один раз каждые 90 минут. здесь обновляются вопрос с обновленным HTML

<li class="lifilter"> 
    <input type="checkbox" class="filtercheck" id="Cheeks..."> 
    <label for="Cheeks..."> 
     <a href="/collections/cheeks" class="cheeks">Cheeks</a> 
    </label> 
</li> 

и кодом JS я пытаюсь использовать (из предыдущего ответа)

$('.lifilter').each(function(){ 
     $(this).find(".filtercheck").next('label').find('a').each(function(){ 
     var lasturl = $(this).attr('href'); 
     var urlsplit = lasturl.split("/"); 
     console.log(urlsplit); 
     var finalvar = urlsplit.pop(); 
     console.log('Adding class: ' + finalvar); 
     $(this).addClass(finalvar); 
     }); 
}); 
+0

что это ошибка вы столкнулись? –

+0

добавить это urlsplit [urlsplit.length -1] –

+0

никаких связанных ошибок. @unikom, не могли бы вы показать его в коде? Я участвую в учебе, и вечерняя сонливость действительно не помогает понять ее: – Arazam

ответ

1

ОК, так что это не кажется, никто здесь пытался попробовать решение здесь, прежде чем отправлять.

Первое начало cheeks.... Это сложный идентификатор, который нужно найти (вам нужно избегать периодов). label также не является частью внутреннего html, где ID - cheeks..., поэтому нам нужно найти соседний элемент и посмотреть нужный тег якоря .

Вот код:

$(document).ready(function() { 
    $('#Cheeks\\.\\.\\.').next('label').find('a').each(function(){ 
      var lasturl = $(this).attr('href'); 
      var urlsplit = lasturl.split("/"); 
     console.log(urlsplit); 
      var finalvar = urlsplit.pop(); 
     console.log('Adding class: ' + finalvar); 
      $(this).addClass(finalvar); 
    }); 
}); 

И here является рабочим jsfiddle с раствором.

+0

Отличный ответ, * nbrooks * заметил неправильный селектор и потому, что он использует '.pop()', как я это сделал в своем ответе, я не видел большого смысла в исправлении селектора, так как ответ был бы таким же, как ваш. – NewToJS

+0

Если вы публикуете немного больше того, что вы пытаетесь найти (вы отправили только один элемент с примером, указывающим на идентификатор, так что это все, на чем я мог бы отложить ответ), я могу соответствующим образом настроить свой ответ. –

+0

Да. это была моя ошибка. Я отправлю новый вопрос через несколько минут, так как это было бы нечестно делать здесь – Arazam

0

держать его просто как код вы могли бы сделать

finalvar = urlsplit[urlsplit.length-1]; 

в случае, если вы не хотите, базовый URL в качестве действительного возврата, то:

finalvar = (urlsplit.length > 1 ? urlsplit[urlsplit.length-1] : ""); 

замените «" вашей предпочтительной ошибкой/возвратом по умолчанию

Вы также можете попытаться найти индекс последнего '/' и выполнить подстроку.

0

попробуйте это.

FIDDLE DEMO

var URI = 'www.example.com/sub1/sub2/sub3/', 
    parts = URI.split('/'), 
    lastPart = parts.pop() == '' ? parts[parts.length - 1] : parts.pop(); 
//RESULT : "sub3" 
0

Вы можете извлечь последнюю часть пути (то есть все, что после последнего /), используя регулярное выражение:

text.replace(/.*\//g, "")

Это удалит весь текст перед косой чертой, а также сама косая черта. Вы также заметите, что ваш селектор не соответствовал элементам; вы ищете метки, вложенные в входы, которые не соответствуют html, который вы опубликовали (и не являются допустимой структурой DOM). Соответствующим селектором будет .lifilter label a, так как <label> находится в пределах <li>.

$(function() { 
 
    setTimeout(function() { 
 
    $('.lifilter label a').each(function() { 
 
     // strip everything up to and including the last forward slash 
 
     var path = $(this).attr('href').replace(/.*\//g, ""); 
 

 
     $(this).addClass(path); 
 

 
    }); 
 
    }, 1500); 
 
});
a.cheeks:after { 
 
    content: " (className = 'cheeks')"; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<li class="lifilter"> 
 
    <input type="checkbox" class="filtercheck" id="Cheeks..."> 
 
    <label for="Cheeks..."> 
 
    <a href="/collections/cheeks">Cheeks</a> 
 
    </label> 
 
</li>

Смежные вопросы