jQuery检查String是否为HTML标记

时间:2013-06-25 05:21:24

标签: javascript jquery html

我只需要检查字符串是否是HTML标记。我在谷歌搜索并尝试下面的代码,但没有成功:

var v = $(string).html() ? 1 : 0;

--or----------------------------------------------

var htmlExpr = new RegExp("/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/");
var v = htmlExpr.test(string) ? 1 : 0;

--or----------------------------------------------

var v = $(string).each(function(){$(this).html();} ? 1 : 0;

====

实际上我想检查字符串是否是img标签,获取它的alt属性,如果不是(它是一个普通的非html字符串)得到它的全部。

请帮我解决这个问题...... 感谢

====

让我向您展示一个真实的例子,包括所有方面的细节......

这是主要功能:

content.find('a').each(function () {
    var $this = $(this),
        optText = '&nbsp;' + $this.text(),
        ...,
        ...,
        ...;
    ...
    ...
    ...
}

在这个函数中,我需要在第3行处理“$ this.text()”部分。

我们正在寻找的标签中的文本有时包含普通字符串,有时还包含img标记。当它是普通文本时,我想完全把它放在optText变量中;但是当它是一个img标签时,我只想把它的alt属性放在那个变量中。

如此简短:

$this.text() => NormalText

--or----------------------------------------------

$this.text() => <img src="#" alt="AltText" />

所以我改变了这个功能,并用第三行中的每个代码替换了“$ this.text()”代码:

($this.text().html() ? $('img', $this.text()).attr('alt') : $this.text())

--or----------------------------------------------

(htmlExpr.test($this.text()) ? $('img', $this.text()).attr('alt') : $this.text())

[which htmlExpr was defined before...]

--or----------------------------------------------

($this.text().each(function(){$(this).html();}) ? $('img', $this.text()).attr('alt') : $this.text())

但这些代码都不适合我...

现在,你能帮帮我吗?!

4 个答案:

答案 0 :(得分:3)

这样的东西?:

var str = "<img alt='hello'>";

if(str.match(/\<img.+\>/)) {
    str = $(str).attr('alt');
}

它接受字符串,检查它是否为img元素,然后获取alt属性。更简单的方法是在if语句中检查alt

if($(str).attr('alt')) {
    str = $(str).attr('alt');
}

您还可以使用is()attr()合并:

if($(str).is('img') && $(str).attr('alt')) {
    str = $(str).attr('alt');
}

答案 1 :(得分:0)

如果您只是想检查它是否是图片并且具有alt属性,请尝试使用此正则表达式:

/(?=.*alt=".+")<img.*?\/?>/

快速测试:

var str1 = '<img src="http://dot.com/test.jpg" alt="test"/>';
var str2 = '<img src="http://dot.com/test.jpg" alt="" />';
var str3 = '<input/>';

console.log(img.test(str1)); //= true
console.log(img.test(str2)); //= false
console.log(img.test(str3)); //= false

答案 2 :(得分:0)

这有帮助吗?

Demo

var samples = ["<img src='#' alt='img1' />","hello","bye","<img src='#' alt='img2' />"];
for(var i = 0, len = samples.length; i < len; i++) {
    if($(samples[i]).length > 0) {
        alert($(samples[i]).attr('alt'));
    }    
}

答案 3 :(得分:0)

我自己发现了这个问题......这是一个合乎逻辑的错误...

关键是,当字符串是普通文本时,我们可以使用text(),但是当它是HTML时我们应该使用html(),否则text()会返回null ...

我也从你们那里学到了一些东西......非常感谢你们......;)