te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - Cannot read property 'replace' of undefined - replacing text in JS generated HTML - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Cannot read property 'replace' of undefined - replacing text in JS generated HTML - Stack Overflow

programmeradmin2浏览0评论

I have an unordered list (ul) that is generated by external javascript. In each list item there is a repeated line that I'd like to delete. Because I cannot modify the external javascript, I am attempting to use the replace method. The list is identified by a class given to each li element; rss-item.

The following is my code:

   <script>
        function myFunction() {
            var str = document.getElementsByClassName('rss-item').innerHTML; 
            var res = str.replace('Text to replace', '');
            document.getElementsByClassName('rss-item').innerHTML = res; 
        }
    </script>

    <button onclick="myFunction()">Replace</button>

The error is occuring on the following line:

var res = str.replace('Text to replace', '');

The error states:

Uncaught TypeError: Cannot read property 'replace' of undefined

From what I understand, this probably means that the javascript is either not finding the element with class name 'rss-item', or not finding the text I am trying to replace. I am absolutely certain this is the correct class name, and that the text I am trying to replace is indeed there. Is this problem occuring because the markup is being generated by javascript? I've e to a dead end.

I have an unordered list (ul) that is generated by external javascript. In each list item there is a repeated line that I'd like to delete. Because I cannot modify the external javascript, I am attempting to use the replace method. The list is identified by a class given to each li element; rss-item.

The following is my code:

   <script>
        function myFunction() {
            var str = document.getElementsByClassName('rss-item').innerHTML; 
            var res = str.replace('Text to replace', '');
            document.getElementsByClassName('rss-item').innerHTML = res; 
        }
    </script>

    <button onclick="myFunction()">Replace</button>

The error is occuring on the following line:

var res = str.replace('Text to replace', '');

The error states:

Uncaught TypeError: Cannot read property 'replace' of undefined

From what I understand, this probably means that the javascript is either not finding the element with class name 'rss-item', or not finding the text I am trying to replace. I am absolutely certain this is the correct class name, and that the text I am trying to replace is indeed there. Is this problem occuring because the markup is being generated by javascript? I've e to a dead end.

Share Improve this question asked Mar 16, 2015 at 19:26 JimmiJimmi 351 gold badge1 silver badge5 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 7

document.getElementsByClassName('rss-item') returns an array-like object (a HTMLCollection). If you want the first element, you should ask for it:

var str = document.getElementsByClassName('rss-item')[0].innerHTML;

If you wanted to be a bit more defensive, it may be worth actually checking that any elements have been found, using something like this:

var elements = document.getElementsByClassName('rss-item');
if (elements.length > 0) {
    elements[0].innerHTML = elements[0].innerHTML.replace('Text to replace', ''); 
}

As you have suggested in the ments, you may wish to perform the replacement on all of the elements that are found. In this case, you can loop through the elements like this:

var elements = document.getElementsByClassName('rss-item');
for (var i = 0; i < elements.length; ++i) {
    elements[i].innerHTML = elements[i].innerHTML.replace('Text to replace', '');
}
发布评论

评论列表(0)

  1. 暂无评论