用正则表达式,从html中匹配指定id的html元素,并设置其属性值。如下:<img id="img1" src="" />  //查找id为img1的img,并且设置它的src属性值
<div id="div1" class=""></div> //查找id为div1的div,并且设置它的class属性值
谢谢回复!

解决方案 »

  1.   

    呃,这个东东要正则做什么??
    <script type="text/javascript">
    function AppendAttr(a,b){
        var o=document.getElementById(a);
        for(name in b){
            o.setAttribute(name,b[name]);
        }
    }
    AppendAttr('test',{"class":'aaa',"src":'bbb'});
    alert(document.getElementById('a').innerHTML)
    </script>
    <div id="a">
    <div id="test"></div>
    </div>
      

  2.   

    首先,谢谢回复!
    不过,我的应用环境无法使用js,jquery来获取dom对象!
    不然,我不会到这里提问了^_^!!
      

  3.   

    别沉了!其实我的应用是整合flowplayer。
    整合过程中遇到了问题,js、jquery无法获取dom,所以只能用这种方法来处理
      

  4.   

    设置其属性值,这要操作DOM了,用正则表达式不可能做吧
      

  5.   

    flowplayer??视频??
    你基于web的,为什么不能用js?搞不清楚你具体的需求如果你是需要在后台中完成这些操作,试试转化成xml,用节点看看能不能操作。再要不然后台写正则匹配指定的字符串,然后修改吧。就不叫操作html了,纯字符串操作了
      

  6.   

    正则表达式,只是等于一个规则,你不用js去应用这个规则,怎么让正则起作用的
    刚写了好久,发现还是js写的,蛋疼了~~
    var width_1 = "width=\"10px\"";//要添加的属性
    var test_value = document.getElementById('a').value;  //我测试用的标签
    var reg = /\<[^\<]*(id\s*\=\s*(\"div\")|(\'div\')|(div]))[^\<]*[\/]?\>/gi;
    test_value = test_value.replace(reg,function($1,$2){
    alert($1);
    alert($2);
    return $1.replace($2,$2 + " " +width_1);
    });
    alert("aaa="+test_value);唉~~
      

  7.   

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>无标题文档</title>
    <script type="text/javascript">
    function test(x){
    var a=document.body.innerHTML;
    var reg=new RegExp("<.*?id=\""+x+"\".*?>");
    a=a.match(reg);
    a[0]=a[0].replace("src=\"\"","src=\"1.jpg\"");
    document.body.innerHTML=a;
    alert(a);
    }
    window.onload=function(){test("img1");};
    </script>
    </head><body>
    <img id="img1" src="" />
    <div id="div1" class=""></div>
    </body>
    </html>
    比较麻烦  你替换下  上边会把document.body的内容完全覆盖掉  而且也不可靠的样子 不能操作dom吗?
      

  8.   

    不能用js,那只好用xml方式简单点吧
    html是xml格式的,后台把它当xml文件处理试试,或者把里面字符串取出来,做成一个xml对象,应该可以用xml节点的操作方式,比用正则去找字符串总要方便些吧?
      

  9.   

    请大家不要误解:不是说不能用js,而是说不能用js来获取dom、以及设置其属性,这些功能都得用正则来代替。再重述一下功能:
     
    如下:
    第1步:用正则表达式匹配id为img1的img标签
           (或者是去匹配id为div1的div标签)
      
    第2步:设置那些标签(img,div)的属性值,如它们的src属性,以及class属性//查找id为img1的img,并且设置它的src属性值
    <img id="img1" src="" /> 
    //查找id为div1的div,并且设置它的class属性值
    <div id="div1" class=""></div> 
      

  10.   

    为什么你问我什么应用环境的时候,我想回答,就是因为怕你被绕进去了,问题变得复杂化!
    当然说出来,也许有另一个好处,就是有些高手用过它(flowplayer),对它深有研究,能够通过它本身的机制
    来解决问题,那么这就变得简单了!
      

  11.   

    为什么不能用jquery?上代码。估计你设置不当所以没起作用。
      

  12.   

    用正则来获取dom?不可能吧?
      

  13.   

    楼主 意思是对字符串 进行操作?
    参考下<script type="text/javascript">
    String.prototype.addDomAttr = function(id, attr, value){
    var s = this,
    reDOM = new RegExp('<[^>]+\\sid="'+id+'"[^>]*?>', 'i'),
    reAttr = new RegExp(attr+'=""' ,'i');
    if( reDOM.test(s) ){
    var m = s.match(reDOM).toString();
    if( reAttr.test(m) ){
    var n = s.match(reAttr).toString();
    s = s.replace(m, m.replace(n, n.replace('"', '"'+value)));
    }else{
    var l = m.lastIndexOf('"');
    var a = m.split('');
    a.splice(l+1, 0, ' '+attr+'="'+value+'"')
    s = s.replace(m, a.join(''));
    }
    }
    return s
    };
    var str = '<img id="a" src="" />123<img id="img1" src="" />123<span id="test">test</span><span>打酱油</span><div id="div1" class=""></div>123';

    alert(str.addDomAttr('img1', 'src', 'baidu.jpg'));
    alert(str.addDomAttr('test', 'title', 'i am test'));
    alert(str.addDomAttr('div1', 'class', 'className'));
    </script>
      

  14.   

    18楼的大哥理解是对的!有个小问题,请帮忙改一下:
    当要替换的属性值不为空时,替换会失败,会变成追加。如:<img id="img1" src="test.jpg" />str.addDomAttr('img1', 'src', 'baidu.jpg'));此时返回的结果为::<img id="img1" src="test.jpg" src="baidu.jpg" />
      

  15.   

    参考下。
        String.prototype.addDomAttr = function(id, attr, value){
            var s = this,
                reDOM = new RegExp('<[^>]+\\sid="'+id+'"[^>]*?>', 'i'),
                reAttr = new RegExp(attr+'="[^"]*"' ,'i');
            if( reDOM.test(s) ){
                var m = s.match(reDOM).toString();
                if( reAttr.test(m) ){
                    var n = m.match(reAttr).toString();
    var a = n.split(''),
    l = n.lastIndexOf('"') - n.indexOf('"') - 1;
    a.splice(n.indexOf('"')+1, l, '');
                    s = s.replace(m, m.replace(n, a.join('').replace('"', '"'+value)));
                }else{
                    var l = m.lastIndexOf('"');
                    var a = m.split('');
                    a.splice(l+1, 0, ' '+attr+'="'+value+'"');
                    s = s.replace(m, a.join(''));
                }
            }
            return s
        };
      

  16.   

    搞到最后还是使用js完成。既然是基于js,使用jquery做这种操作你想要多容易??var str='<img id="a" src="" />123<img id="img1" src="" />123<span id="test">test</span><span>打酱油</span><div id="div1" class=""></div>123';
    var dom=$("<div>");
    dom.append(str);
    dom.find("img[id='a']").attr("src","ddd");
    alert(dom.html())
      

  17.   

    需求:
    对含有html内容的字符串进行操作,为内容中的dom元素设置属性值。
    解决方案:
    1:(21楼的代码)使用正则表达式来匹配和替换2:(27楼的代码)使用jquery将字符串转成dom来进行操作
      
        这个代码比较简洁,利用了jquery本身对dom元素强大的处理能力,就是在使用之前使用了一个转换!
    当前应用背景下,这两种方案都可以,方案2更为简洁!
    感谢crying_boy兄弟以及大家的热心帮助!