1

我只需要检查一个字符串是否是 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

4 回答 4

3

像这样的东西?:

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

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

它接受字符串,检查它是否是一个img元素,然后获取 alt 属性。一种更简单的方法是只检查altif 语句:

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

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

if($(str).is('img') && $(str).attr('alt')) {
    str = $(str).attr('alt');
}
于 2013-06-25T05:30:54.223 回答
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
于 2013-06-25T05:32:32.013 回答
0

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

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

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

于 2013-06-25T12:15:07.763 回答
0

这有帮助吗?

演示

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'));
    }    
}
于 2013-06-25T06:07:03.220 回答