根据父div属性更改部分href值

时间:2015-10-29 21:17:09

标签: javascript jquery html

我有这个HTML

<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>

我想知道如何更改href的“/ NeedToChange /”部分,具体取决于class="1"的div的标题值是否包含我需要的文本。

非常感谢任何帮助

3 个答案:

答案 0 :(得分:1)

类不能以Number开头! (JS可能会工作,但CSS会失败,你的文档也不会验证。)

如果您无法控制"NeedToChange",则可以使用正则表达式定位并替换斜杠字符之间的任何文字/unknownFolder//anything/

&#13;
&#13;
$(".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);
  });

});
&#13;
<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>
&#13;
&#13;
&#13;

以上将导致新的hrefs:

/SomeText1/DispForm.aspx?ID=1
/WOOOOOW/DispForm.aspx?ID=1
    {li} [title] $(".1[title]")确保我们定位.1(BTW不是有效的类名:))元素实际上是一个标题。
  • 与您.find()内部.3 Anchor孩子相比,使用RegExp访问.attr("href", return replace seekgets
    /^\/([^\/]+)/ Explained on regex101.com

答案 1 :(得分:0)

你会这样做:

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

我将班级改为“一个班级”。因为你不应该用数字开始上课。

这是example

答案 2 :(得分: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

相关问题