1

我有以下html示例

<div id="main"><input type="hidden" name="bilbo" value="0"><a id="baggins" href="somewhere.com"></div>
<div id="main"><a id="baggins" href="somewhere-else.com"></div>
<div id="main"><a id="baggins" href="somewhere-elseagain.com"></div>

我需要做的是循环遍历每个 id 为 main 的 div 并查找隐藏的输入类型是否存在。

然后我需要在与输入隐藏相同的div中更改该链接的href,每次都会有多个。

任何帮助,将不胜感激。

4

2 回答 2

2

假设您使用类而不是重复 ID

$(".main").each(function() {
    var isHidden = $(this).children("input[type='hidden']").length > 0;
    if (isHidden) {
        $(this).children("input[type='hidden']").nextAll("a").each(function() {
            //Change the href now
            $(this).attr("href", "newlink");
        });
    }
});

演示:http: //jsfiddle.net/7Rc9X/

于 2013-04-26T13:41:33.707 回答
2

由于您无法控制 HTML,因此请忘记 ID。

$('div:has(input[type=hidden]) a')

这意味着,给我所有嵌套在一个div元素中的超链接,这些超链接必须在 DIV 中嵌套一个隐藏的输入。

你应该大致有以下

$('div:has(input[type=hidden]) a').each(function (i, link) {
    $(link).attr('href', 'whatever.bla');
});

如果您将 rss 提要 html 提取到字符串中,那么您可以这样做:

// assuming you fetched the rss feed as a string or responseText
var htmlString = '<div id="main"><input type="hidden" name="bilbo" value="0"><a id="baggins" href="somewhere.com"></div><div id="main"><a id="baggins" href="somewhere-else.com"></div><div id="main"><a id="baggins" href="somewhere-elseagain.com"></div>';

var $feeds = $(htmlString);

$feeds.find('div:has(input[type=hidden]) a').each(function (i, link) {
    $(link).attr('href', 'whatever.bla');
});
于 2013-04-26T13:41:51.897 回答