2015-10-29 2 views
1

У меня есть этот HTMLИзменить часть HREF стоимости на основе атрибута родительского сНу

<div class="1" style="" title="NeedthisText TextIDontneed"> 
 
<div class="2"> 
 
<div class="3"> 
 
<a target="_blank" href="/NeedToChange/DispForm.aspx?ID=1">Link</a> 
 
</div> 
 
</div> 
 
</div>

Я хочу знать, как я могу изменить «/ NeedToChange /» часть HREF в зависимости, если значение заголовка div с class="1" содержит некоторый текст, который мне нужен.

Любая помощь будет принята с благодарностью

+0

Мне очень жаль, я не имею в виду вратаря это как то – suizzak

+0

Нет проблем, к счастью, ваши изменения были незначительными. Иногда пользователи делают небольшое редактирование, которое кардинально меняет результат ответа ... Все хорошо :) –

ответ

1

Занятия не могут начинаться с номера! (JS может работать, но CSS не удастся, и документ не будет проверять.)

если "NeedToChange" является то, что вы не можете управлять вы можете цель Regex и заменить любой текст между косой чертой /unknownFolder/, /anything/

$(".1[title]").each(function(){ 
 

 
    var title = this.title.split(" ")[0]; // Get only 1st part of title 
 

 
    $(this).find(".3 a").attr("href", function(idx, val){ 
 
    return val.replace(/^\/([^\/]+)/, "/"+title); 
 
    }); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div class="1" style="" title="SomeText1 I_DONT NEED this"> 
 
    <div class="2"> 
 
    <div class="3"> 
 
     <a target="_blank" href="/NeedToChange/DispForm.aspx?ID=1">Link ID=1</a> 
 
    </div> 
 
    </div> 
 
</div> 
 

 
<div class="1" style="" title="WOOOOOW NeitherThis"> 
 
    <div class="2"> 
 
    <div class="3"> 
 
     <a target="_blank" href="/NeedToChange/DispForm.aspx?ID=37">Link ID=37</a> 
 
    </div> 
 
    </div> 
 
</div>

выше приведет к новым hrefs:

/SomeText1/DispForm.aspx?ID=1 
/WOOOOOW/DispForm.aspx?ID=1 

  • [title] в $(".1[title]") убеждается, что вы ориентируетесь элемент .1 (BTW не является допустимым именем classs :)), что на самом деле имеет название.
  • Чем вы .find() это внутренний .3 ребенок Якорь и доступ это .attr("href", свойство return ИНГ replace с использованием RegExp:
    /^\/([^\/]+)/ Explained on regex101.com
0

Вы бы сделать это таким образом, как это:

if ($('.one').attr('title') == 'SomeText1') { 
    $('a[href*="/NeedToChange/"]').each(function(){ 
     var newLink = $(this).attr('href').replace('/NeedToChange/','/NewLink/'); 
     $(this).attr('href',newLink); 
    }); 
} 

Я изменил класс «один», так как вы не должны начинать занятия с номером ,

Адрес example.

0

Перебор все ссылки и получить титул родителей следующим образом: jsfiddle

$(".3 a").each(function(){ 
    var $parent = $(this).closest(".1"), 
     title = $parent.attr("title"), 
     link = "/" + title + "/DispForm.aspx?ID=1"; 
    $(this).attr("href", link); 
}); 

Это, похоже, отлично подходит для следующих html:

<div class="1" style="" title="SomeText1"> 
    <div class="2"> 
     <div class="3"> 
      <a target="_blank" href="/NeedToChange/DispForm.aspx?ID=1">Link 1</a> 
     </div> 
    </div> 
</div> 

<div class="1" style="" title="SomeText2"> 
    <div class="2"> 
     <div class="3"> 
      <a target="_blank" href="/NeedToChange/DispForm.aspx?ID=1">Link 2</a> 
     </div> 
    </div> 
</div> 

Извините, что увидел название с пространством только сейчас. Будет искать обновление.

обновление 1:

как Roko C. Buljan упомянули вы, вероятно, следует разделить заголовок в массив и получить первый элемент этого.

$('.1').each(function(){ 
    var title = $(this).attr("title"), 
     clTitle = title.split(" ")[0]; 

    var $link = $(this).find(".3 a"), 
     href = $link.attr("href"), 
     newHref = href.replace("NeedToChange", clTitle); 

    if(typeof $(this).attr('title') !== 'undefined') { 
     $link.attr("href", newHref); 
    } 

}); 

обновлена ​​скрипку: jsfiddle

+0

Я бы предпочел, чтобы 'title' существовал вообще, потому что ваш код уничтожит действительную ссылку ... но это, вероятно, просто слишком picky ... –

+0

Также вы жестко кодируете '' /DispForm.aspx?ID=1 "' в JS, предполагая, что он не будет изменен из HTML (является неизменным) –

+0

Также требуется только первая строка заголовка. –

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