在Javascript或jQuery中,如何检测特定标记是否存在?

时间:2010-01-19 18:43:34

标签: javascript jquery html tags

给出以下字符串:

htmlStr1 = "<img>test1</img>";
htmlStr2 = "<div>test2</div>";

我想知道是否有办法编写一个函数来检测“img”标签(例如)。因此,如果将这两个字符串都传递给它,并且如果将第二个字符串传递给它则不应该执行任何操作。

因此,例如,您将运行如下函数:

result1 = checkIfTagExists(htmlStr1, "img");
result2 = checkIfTagExists(htmlStr2, "img");
alert(result1); // should output "true" or "1" or whatever
alert(result2); // should output "false" or do nothing

6 个答案:

答案 0 :(得分:1)

我会使用快速的RegExp,不需要在不需要时使用任何jQuery选择器。

function checkIfTagExists(str, tag) {
    return new RegExp('<'+tag+'[^>]*>','g').test(str);
}

答案 1 :(得分:0)

在if语句中包装它,你很高兴

jQuery(jQuery(htmlStr1)).find('img').size() > 0

答案 2 :(得分:0)

如果字符串位于元素的innerHTML中,则会更容易:

function checkIfTagExists(element, tagName) {
    return element.getElementsByTagName(tagName).length > 0;
}

正则表达式检查可能不够(参见RegEx match open tags except XHTML self-contained tags):)

如果你真的只是拥有字符串,你可以从字符串创建一个元素,并将innerHTML设置为字符串,然后对该新元素进行上述检查。这就是$(tagName, htmlContext)将要做的事情。

答案 3 :(得分:0)

如果这是您正在寻找的功能的更多示例,而不是您在其中使用的确切情况,则jQuery has选择器可能会有所帮助。

相关question示例。

对于这种情况,你会这样做:

var str1ContainsImg = $(htmlStr1 + ":has(img)").length > 1;
var str2ContainsImg = $(htmlStr2 + ":has(img)").length > 1;

编辑:正如tvanfosson在评论中指出的那样,如果你的img标签没有结束标记(<img src='' />),那么这个确切的解决方案将无效。如果这是一个问题,您可以检查返回的第一个元素的标记名称,如下所示:

var htmlStr3 = "<img src='' />";
var containsEmptyImg = $(htmlStr3 + ":has(img)").length > 1 || 
    $(htmlStr3 + ":has(img)")[0].tagName.toUpperCase() == 'IMG';

答案 4 :(得分:0)

直接javascript:

function checkIfTagExists(src, tag) {
    var re = "<"+tag + ">\.+<\\/"+tag+">";
    return new RegExp(re).test(src);
}

答案 5 :(得分:0)

这可能有一些开销,但它应该足够强大,可以与任何给定的字符串或任何元素的innerHTML一起使用。

function getTagCountFromString(string, tag) {
    var count = 0;
    tag = tag.toLowerCase();
    $(string).each(function(idx, el){
        if(el.nodeType === 1) {
           if(el.tagName && el.tagName.toLowerCase() === tag) {
               count++;
           }
           if(el.childNodes.length > 0) {
               try {
                   count += getTagCountFromString(el.innerHTML, tag);        
               } catch (ex) { }
           }
        }
    });
    return count;
}

getTagCountFromString('<img src=""/><a href=""/>', 'img'); //returns 1

然后要获得一个布尔值,你可以检查计数是否不等于0,或者为你做一个辅助函数。