如何在元素前添加一些HTML,然后检查HTML是否已预先添加?

时间:2011-10-24 13:46:31

标签: jquery

我有一个全局JS方法,在每个标记为具有类的字段前放置* .fish-label

代码是:

var fishString = "<span class='fish-label'> * </span>";
$elements.each(function (index, value) {
            if ($(this).html().indexOf(fishString) != 0) {
                $(this).prepend(fishString);
            }
        });

这适用于除IE以外的所有浏览器。当我提醒html()值时,IE会对注入的HTML进行大写,并且我的引号也会在某处丢失。

有没有更好的工作方式我可以实现这个?这个想法是,如果函数被调用两次,它将不会添加两个星号。

4 个答案:

答案 0 :(得分:2)

你可以filter这些元素排除那些已经有.fish-label的元素,并在其余元素前加一个元素:

var fishString = "<span class='fish-label'> * </span>";
$elements.filter(function() {
    return !$(this).has(".fish-label").length;
}).prepend(fishString);

这是working example

答案 1 :(得分:1)

您可以像任何其他常规嵌套DOM元素一样搜索元素。

        var fishString = "<span class='fish-label'> * </span>";
        $elements.each(function() {
            if ($(this).children('span.fish-label').length === 0) {
                $(this).prepend(fishString);
            }
        });

答案 2 :(得分:1)

要做到这一点,你也可以没有js。 例如,如果像每个项目的第一个标签,您可以使用以下语句:

<强> HTML

<label class="required" for="username">Username</label>
<input id="username" type="text" value="" name="username">

<强> CSS

label.required:after {
    content: " *";
}

DEMO

答案 3 :(得分:0)

如果这只是UI-stuff,您可以使用CSS功能:

.fish-label:before {
    content: "* ";
}

请参阅此处的工作示例:http://jsfiddle.net/mikhailov/7vxb5/1/